是否可以將標量值SQL函數添加爲EF中的屬性?EF:作爲屬性的SQL函數
我有一些函數,在OrderLine表中取一個OrderId(即,OrderLineCost的SUM)的不同值。
我希望能夠通過訂單數據模型訪問它們。
有沒有在Order數據模型中添加這些函數作爲屬性的方法,這樣我就可以訪問Order.OrderLineCostTotal而不是分別調用數據庫?
謝謝
是否可以將標量值SQL函數添加爲EF中的屬性?EF:作爲屬性的SQL函數
我有一些函數,在OrderLine表中取一個OrderId(即,OrderLineCost的SUM)的不同值。
我希望能夠通過訂單數據模型訪問它們。
有沒有在Order數據模型中添加這些函數作爲屬性的方法,這樣我就可以訪問Order.OrderLineCostTotal而不是分別調用數據庫?
謝謝
是的。你應該能夠做到這一點。藉助EF 6.1,在代碼優先和數據優先的情況下構建這種類型的東西都更加容易。
有一個名爲Code first store functions
的codeplex項目可以簡化您的數據上下文中的數據存儲功能。這裏是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
好問題... – ericpap 2014-11-21 12:41:19