Entity Framework呼叫資料庫定義的自訂函式(SQL Functions)
Step1:在資料庫中建立自訂函式。
Step2:在 .edmx 檔案的存放結構定義語言 (SSDL) 中宣告函式。 函式的名稱必須和資料庫中宣告的函式名稱一樣。
Step3:將對應的方法加入至應用程式程式碼的類別中,然後將 EdmFunctionAttribute 套用至方法。請注意,屬性的 NamespaceName 和 FunctionName 參數分別是概念模型的命名空間名稱和概念模型中的函式名稱。 LINQ 的函式名稱解析是區分大小寫的。
Step4:呼叫 LINQ to Entities 查詢中的方法。
參考來源:HOW TO 呼叫自訂資料庫函式 (LINQ to Entities)
後記~
直接呼叫 Function
CREATE FUNCTION [cox].[ACC_CalcNewCompanyNo] ( @EXCH_ID int ) RETURNS numeric(12,4) AS BEGIN DECLARE @RATE numeric(12,4) SELECT @RATE=E2.RATE FROM cox.EXCH_M E2 INNER JOIN cox.PERIOD P ON P.ID=E2.PERIOD_ID AND P.ISCURRENT='Y' WHERE E2.EXCH_ID=@EXCH_ID; RETURN @RATE END
Step2:在 .edmx 檔案的存放結構定義語言 (SSDL) 中宣告函式。 函式的名稱必須和資料庫中宣告的函式名稱一樣。
Step3:將對應的方法加入至應用程式程式碼的類別中,然後將 EdmFunctionAttribute 套用至方法。請注意,屬性的 NamespaceName 和 FunctionName 參數分別是概念模型的命名空間名稱和概念模型中的函式名稱。 LINQ 的函式名稱解析是區分大小寫的。
[System.Data.Entity.DbFunction("XXXXXModel.Store", "ACC_CalcNewCompanyNo")] public static decimal? ACC_CalcNewCompanyNo(int? EXCH_ID) { throw new NotSupportedException("Direct calls are not supported."); }
Step4:呼叫 LINQ to Entities 查詢中的方法。
參考來源:HOW TO 呼叫自訂資料庫函式 (LINQ to Entities)
後記~
直接呼叫 Function
var result = db.Database.SqlQuery("select cox.ACC_CalcNewCompanyNo(1)").FirstOrDefault();
Post a Comment: