EF:SQL 函数作为属性
本文关键字:属性 函数 SQL EF | 更新日期: 2023-09-27 18:31:17
是否可以在 EF 中添加标量值 SQL 函数作为属性?
我有一些函数,它们对采用 OrderId 的 OrderLine 表中的不同值求和(即 OrderLineCost 的总和)。
我希望能够通过订单数据模型访问这些内容。
有没有办法将这些函数添加为订单数据模型的属性,以便我可以访问 Order.OrderLineCostTotal,而不是对数据库进行单独的调用?
谢谢
是的。你应该能够做到这一点。使用 EF 6.1,可以更轻松地在代码优先和数据库优先中生成此类内容。
有一个名为 Code first store functions
的代码复合项目,用于简化数据上下文中数据存储函数的使用。下面是 nuget 包说明:
支持实体框架 6.1.1+ 代码优先的存储函数(表值函数、标量用户定义函数和存储过程)。
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 数据库,则可以使用函数导入将函数获取到模型中。但是,该向导非常有缺陷(即使在最新的Visual Studio 2013中也是如此),因此有一种常用的方法可以在EDMX xml中手动修复导入的内容。您可以在此处找到说明:
http://logiczone.me/entity-framework-and-sql-db-scalar-functions