有没有办法在使用DbContext Generator时获得Function Import支持?

时间:2011-04-18 14:25:54

标签: c# ado.net entity-framework-4.1 ado.net-entity-data-model

我正在尝试使用new-ish Entity Framework 4.1 DbContext Generator,因为它为所有实体生成非常干净的POCO类,并且它使用DbContext API而不是ObjectContext API。我遇到的问题是似乎没有办法在DbContext API中映射“函数导入”(或者至少使用生成器)。是不是可以使用存储过程与DBContext API进行函数导入,或者我只是做错了什么?

由于

更新 我认为这是可能的,但我需要弄清楚如何获得DbContext API的底层ObjectContext,至少有人知道如何做到这一点吗?

2 个答案:

答案 0 :(得分:4)

我采用了这种方法:

  1. 生成YourContext.Context1.cs文件(使用DbContext Generator)
  2. 将此属性添加到YourContext的部分类:

    /// <summary>
    /// Retrieve the underlying ObjectContext
    /// </summary>
    public ObjectContext ObjectContext
    {
      get
      {
          return ((IObjectContextAdapter)this).ObjectContext;
      }
    }
    
  3. 使用函数导入

  4. .edmx中设置SP
  5. 为每个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;