使用 DbContext Generator 时有什么方法可以获得函数导入支持吗?

发布于 2024-11-02 05:46:17 字数 324 浏览 5 评论 0原文

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

谢谢

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

I am trying to use the new-ish Entity Framework 4.1 DbContext Generator because it generates very clean POCO classes for all of the entities, and it uses the DbContext API instead of the ObjectContext API. The problem I am having is that there appears to be no way to map "Function Imports" in the DbContext API (or at least using the generator). Is it not possible to use stored procedures for function imports with the DBContext API, or am I just doing something wrong?

Thanks

UPDATE
I think that this is possible, but I would need to figure out how to get at the underlying ObjectContext of the DbContext API, anyone know how to do that at least?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

慕烟庭风 2024-11-09 05:46:17

我继续采用这种方法:

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

    /// <摘要>
    /// 检索底层 ObjectContext
    /// 
    公共对象上下文对象上下文
    {
      得到
      {
          返回((IObjectContextAdapter)this).ObjectContext;
      }
    }
    
  3. 使用函数导入在 .edmx 中设置 SP

  4. 将每个 SP 的函数添加到 YourContext 类,例如

    public IEnumerable; GetAllSomeEntities(Nullable accountID)
    {
        对象参数 accountIDParameter;
        if (accountID.HasValue)
        {
            accountIDParameter = new ObjectParameter("accountID", accountID);
        }
        别的
        {
            accountIDParameter = new ObjectParameter("accountID", typeof(global::System.Int32));
        }
    
        return this.ObjectContext.ExecuteFunction("GetAllSomeEntities", accountIDParameter);
    }
    

I went ahead with this approach:

  1. Generate the YourContext.Context1.cs file (using the DbContext Generator)
  2. Add this property to the partial class for YourContext:

    /// <summary>
    /// Retrieve the underlying ObjectContext
    /// </summary>
    public ObjectContext ObjectContext
    {
      get
      {
          return ((IObjectContextAdapter)this).ObjectContext;
      }
    }
    
  3. Set up your SPs in the .edmx using function import

  4. Add a function for each of your SPs to the YourContext class, e.g.

    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);
    }
    
坦然微笑 2024-11-09 05:46:17

至少 EF 4.1 的代码优先方法 不支持映射到存储过程

Code First 不支持映射到
存储过程。但是,您可以
直接调用存储过程
使用 ExecuteSqlCommand 或 SqlQuery。
例如:
context.Database.ExecuteSqlCommand("执行
[dbo].[GetAllProducts]");.

但是你似乎采用模型优先/数据库优先的方法。我不知道是否有解决方案。人们可能会猜测有一种方法,因为它只是说Code-First 不支持 SP 映射,

您可以通过以下方式从 dbContext 实例访问底层 ObjectContext

ObjectContext objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;

At least the Code-First approach of EF 4.1 doesn't support mapping to Stored Procedures:

Code First does not support mapping to
stored procedures. However, you can
call stored procedures directly by
using ExecuteSqlCommand or SqlQuery.
For example:
context.Database.ExecuteSqlCommand("EXECUTE
[dbo].[GetAllProducts]");.

But you seem to go Model-First/Database-First approach. I don't know if there is a solution. One could guess there is a way, since it is only said that Code-First doesn't support SP mapping.

And you can access the underlying ObjectContext from your dbContext instance this way:

ObjectContext objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文