是否可以在EF中添加标量值SQL函数作为属性?
我有一些函数在OrderLine表中对不同的值进行求和,这些值采用OrderId(即OrderLineCost的SUM)。
我希望能够通过订单数据模型访问这些。
有没有办法在Order数据模型中添加这些函数作为属性,这样我就可以访问Order.OrderLineCostTotal而不是单独调用数据库?
由于
答案 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