2015年7月6日 星期一

Step1:在資料庫中建立自訂函式。
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) 中宣告函式。 函式的名稱必須和資料庫中宣告的函式名稱一樣。

SNAGHTML1297ad8

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.");
}

image

Step4:呼叫 LINQ to Entities 查詢中的方法。

image

參考來源:HOW TO 呼叫自訂資料庫函式 (LINQ to Entities)

後記~
直接呼叫 Function
var result = db.Database.SqlQuery("select cox.ACC_CalcNewCompanyNo(1)").FirstOrDefault();

Post a Comment: