EF:SQL函数作为属性

时间:2014-11-21 12:27:54

标签: c# entity-framework sql-function

是否可以在EF中添加标量值SQL函数作为属性?

我有一些函数在OrderLine表中对不同的值进行求和,这些值采用OrderId(即OrderLineCost的SUM)。

我希望能够通过订单数据模型访问这些。

有没有办法在Order数据模型中添加这些函数作为属性,这样我就可以访问Order.OrderLineCostTotal而不是单独调用数据库?

由于

1 个答案:

答案 0 :(得分:3)

是。你应该能够做到这一点。使用EF 6.1,在代码优先和数据库优先的情况下构建这类东西更容易。

有一个名为Code first store functions的codeplex项目,可以简化数据上下文中数据存储功能的使用。这是nuget包描述:

  

支持Entity Framework 6.1.1+ Code First的商店功能(表值函数,标量用户定义函数和存储过程)。

https://codefirstfunctions.codeplex.com/

以上是上下文链接中的一个示例,通过调用SQL函数通过邮政编码获取客户。您可以轻松地将其转换为只读属性:

[DbFunction("MyContext", "CustomersByZipCode")]
public IQueryable<Customer> CustomersByZipCode(string zipCode)
{
    var zipCodeParameter = zipCode != null ?
        new ObjectParameter("ZipCode", zipCode) :
        new ObjectParameter("ZipCode", typeof(string));

    return ((IObjectContextAdapter)this).ObjectContext
        .CreateQuery<Customer>(
            string.Format("[{0}].{1}", GetType().Name, 
                "[CustomersByZipCode](@ZipCode)"), zipCodeParameter);
}

如果您首先使用EF 6数据库,则可以使用函数import将函数添加到模型中。但是,该向导非常错误(即使在最新的Visual Studio 2013中),因此有一种常见的方法可以在EDMX xml中手动修复导入的内容。您可以在此处找到说明:

http://logiczone.me/entity-framework-and-sql-db-scalar-functions