我正在尝试使用new-ish Entity Framework 4.1 DbContext Generator,因为它为所有实体生成非常干净的POCO类,并且它使用DbContext API而不是ObjectContext API。我遇到的问题是似乎没有办法在DbContext API中映射“函数导入”(或者至少使用生成器)。是不是可以使用存储过程与DBContext API进行函数导入,或者我只是做错了什么?
由于
更新 我认为这是可能的,但我需要弄清楚如何获得DbContext API的底层ObjectContext,至少有人知道如何做到这一点吗?
答案 0 :(得分:4)
我采用了这种方法:
YourContext.Context1.cs
文件(使用DbContext Generator)将此属性添加到YourContext
的部分类:
/// <summary>
/// Retrieve the underlying ObjectContext
/// </summary>
public ObjectContext ObjectContext
{
get
{
return ((IObjectContextAdapter)this).ObjectContext;
}
}
使用函数导入
.edmx
中设置SP
为每个SP添加一个函数到YourContext
类,例如
public IEnumerable<SomeEntity> GetAllSomeEntities(Nullable<global::System.Int32> accountID)
{
ObjectParameter accountIDParameter;
if (accountID.HasValue)
{
accountIDParameter = new ObjectParameter("accountID", accountID);
}
else
{
accountIDParameter = new ObjectParameter("accountID", typeof(global::System.Int32));
}
return this.ObjectContext.ExecuteFunction<SomeEntity>("GetAllSomeEntities", accountIDParameter);
}
答案 1 :(得分:2)
至少EF 4.1 doesn't support mapping to Stored Procedures的 Code-First 方法:
Code First不支持映射到 存储过程。但是,你可以 直接调用存储过程 使用ExecuteSqlCommand或SqlQuery。 例如: context.Database.ExecuteSqlCommand(“执行 [DBO] [GetAllProducts]“);。。
但您似乎采用了Model-First / Database-First方法。我不知道是否有解决方案。可以猜测有一种方法,因为它只是说 Code-First 不支持SP映射。
您可以通过以下方式访问ObjectContext
实例中的基础dbContext
:
ObjectContext objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;