2014-11-21 47 views
4

是否可以將標量值SQL函數添加爲EF中的屬性?EF:作爲屬性的SQL函數

我有一些函數,在OrderLine表中取一個OrderId(即,OrderLineCost的SUM)的不同值。

我希望能夠通過訂單數據模型訪問它們。

有沒有在Order數據模型中添加這些函數作爲屬性的方法,這樣我就可以訪問Order.OrderLineCostTotal而不是分別調用數據庫?

謝謝

+0

好問題... – ericpap 2014-11-21 12:41:19

回答

3

是的。你應該能夠做到這一點。藉助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