在 Entity Framework 中,我可以对某个属性应用
NotMapped
属性,以便在数据库表中不创建该属性的列。如何在 DBML 文件中自动生成的类中实现相同的效果?
我有一个返回一些额外字段的 StoredProcedure
。
我像这样调用 SP
:[global::System.Data.Linq.Mapping.FunctionAttribute(Name = "dbo.sp_GetSupplierArticles")]
public ISingleResult<SupplierArticle> GetSupplierArticles([global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "BigInt")] long mainArticleId, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "BigInt")] long? userId)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), mainArticleId, userId);
return ((ISingleResult<SupplierArticle>)(result.ReturnValue));
}
我将必要的字段添加到了分离的部分类中。如果没有其他属性,它将返回默认值,并在分离的部分类中应用[Column(IsDbGenerated = false)]
:
public partial class SupplierArticle
{
[Column(IsDbGenerated = false)]
public double Extra { get; set; }
}
当我尝试使用另一个查询(不是我的存储过程)来获取SupplierArticle
时,它就不起作用了:
db.LoadOptions = db.GenerateDataLoadOptions(entitiesToInclude);
var query =
from shoppingCartItem in db.ShoppingCartItems
where shoppingCartItem.UserId == userId
select shoppingCartItem;
return query.ToList();
我的实体是由于LoadOptions
(通过entitiesToInclude
参数传递)而加载的。
在此查询和另一个尝试使用在.dbml文件中定义的属性加载“差劲”的实体时,我会收到异常消息:无效列名“Extra”,每个其他属性都会出现相同的消息。
扩展实体的正确方法是什么,或者如何避免该异常?
更新:
如果我删除所有属性,异常将不再发生。但是当SP
返回结果时,添加的属性未初始化。