Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF:SQL函数作为属性_C#_Entity Framework_Sql Function - Fatal编程技术网

C# EF:SQL函数作为属性

C# EF:SQL函数作为属性,c#,entity-framework,sql-function,C#,Entity Framework,Sql Function,是否可以在EF中添加标量值SQL函数作为属性 我有一些函数,这些函数对OrderLine表中采用OrderId(即OrderLineCost之和)的不同值求和 我希望能够通过订单数据模型访问这些 有没有办法将这些函数作为属性添加到订单数据模型中,这样我就可以只访问Order.OrderLineCostTotal,而不用单独调用数据库 谢谢是的。你应该能够做到这一点。使用EF 6.1,在代码优先和数据库优先的情况下更容易构建此类内容 有一个名为code-first-store functions的

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

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

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

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


谢谢

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

有一个名为
code-first-store functions
的codeplex项目,用于简化从数据上下文使用数据存储函数的过程。以下是nuget软件包说明:

支持实体框架6.1.1+代码优先的存储函数(表值函数、标量用户定义函数和存储过程)

下面是上面链接中的一个示例,它是一个上下文方法,通过调用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);
}
[DbFunction(“MyContext”、“CustomersByZipCode”)]
公共IQueryable CustomersByZipCode(字符串zipCode)
{
var zipCodeParameter=zipCode!=null?
新的ObjectParameter(“ZipCode”,ZipCode):
新的ObjectParameter(“ZipCode”,typeof(string));
返回((IObjectContextAdapter)this).ObjectContext
.CreateQuery(
string.Format(“[{0}].{1}”,GetType().Name,
“[CustomerByZipCode](@ZipCode)”),zipCodeParameter);
}
如果首先使用EF 6数据库,则可以使用函数导入将函数导入到模型中。但是,该向导有很多错误(即使在最新的VisualStudio2013中也是如此),因此有一种常见的方法可以手动在EDMX xml中修复导入的内容。您可以在此处找到说明:


这是对这个问题的回答吗?如果我理解正确的话,问题是从函数计算Order.OrderLineCostTotal,而不需要对数据库进行额外调用。