【问题标题】:Table-Valued Functions in Entity Framework?实体框架中的表值函数?
【发布时间】:2009-08-18 15:33:13
【问题描述】:

是否可以使用实体框架调用表值函数 (TVF)?

我的数据库中定义了三个 TVF,它们没有显示在实体框架的模型中,也没有显示在“从数据库更新模型”向导中。

在 Linq-to-SQL 中很容易做到这一点,您只需将 TVF 拖到设计图面上,但在 L2E 中似乎不可能。

到目前为止,我还没有找到任何将 TVF 和实体框架一起提到的东西。

【问题讨论】:

    标签: c# .net entity-framework


    【解决方案1】:

    如果您只需要从 Code-First 4.3 中的 TVF 中以类型列表的形式获取结果,您可以在 DbContext 上设置一个帮助器,例如

        public class ModelDbContext : DbContext
        {
    
            public IEnumerable<TOutput> FunctionTableValue<TOutput>(string functionName, SqlParameter[] parameters)
            {
                    parameters = parameters ?? new SqlParameter[] { };
    
                    string commandText = String.Format("SELECT * FROM dbo.{0}", String.Format("{0}({1})", functionName, String.Join(",", parameters.Select(x => x.ParameterName))));
    
                    return  ObjectContext.ExecuteStoreQuery<TOutput>(commandText, parameters).ToArray();
            }
    
            private ObjectContext ObjectContext
            {
                get { return (this as IObjectContextAdapter).ObjectContext; }
            }
        }
    

    称呼它为

    using (var db = new ModelDbContext())
    {
        var parameters = new SqlParameter[]
        {
            new SqlParameter("@Id", SqlDbType.Int),
        };
        parameters[0].Value = 1234;
    
        var items = db.FunctionTableValue<Foo>("fn_GetFoos", parameters);
    }
    

    【讨论】:

      【解决方案2】:

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 2017-05-19
      • 1970-01-01
      • 2012-11-16
      相关资源
      最近更新 更多