我必須在我的DB中定義一個自定義函數來計算實體的「有效結束日期」。 該功能將用於存儲過程,但我需要Web應用程序中的相同邏輯。在C#代碼中使用T-SQL自定義函數
我使用LINQ到SQL連接到我的數據庫和映射表上課。所以我想知道是否有重用我的數據庫中定義的函數的方法。我想通過部分類來擴展我的實體。我必須重寫我的代碼中的邏輯嗎?
注意我需要用我的C#代碼功能,而不是存儲過程。
我必須在我的DB中定義一個自定義函數來計算實體的「有效結束日期」。 該功能將用於存儲過程,但我需要Web應用程序中的相同邏輯。在C#代碼中使用T-SQL自定義函數
我使用LINQ到SQL連接到我的數據庫和映射表上課。所以我想知道是否有重用我的數據庫中定義的函數的方法。我想通過部分類來擴展我的實體。我必須重寫我的代碼中的邏輯嗎?
注意我需要用我的C#代碼功能,而不是存儲過程。
我發現,可以通過調用Linq到-SQL在SQL Server數據庫中定義的函數。
我剛剛導入的功能對象dbml
背景文件。所以我可以這樣調用它:
context.fn_my_db_function(param1, param2, etc);
簡單!
您可以創建一個存儲過程,然後在您的DBML設計師可以將它拖動到方法窗格,這會嘗試自動檢測返回類型,輸入和暴露是通過上下文實例。如果需要,可以使用Visual Studio中的Properties視圖將返回類型映射到表模型或自定義的類型。
這就是所謂就像在C#中的功能,例如:
using (var context = new MyDataContext()) {
var result = context.MyStoredProcedure(input);
}
凡result
將映射的管理型和input
將是必需的參數變量(一個或多個)。
我一定要重寫我的代碼邏輯?
如果你不希望數據庫執行它(僞):
public static YourReturnType Calculate(this TEntity foo)
{
return database.ExecuteFunction("calculate", foo);
}
如果你不想爲每一個計算數據庫的往返,然後是的,你就必須重寫邏輯C#。
這甚至可以自動生成,不需要創建包裝,除非A)返回類型不能自動確定和/或B)需要添加一些邏輯。 – 2013-04-24 08:39:37
我建議你不要使用LINQ to SQL。無論如何,微軟已經停止了它。使用[Entity Framework](http://msdn.microsoft.com/zh-cn/data/ef.aspx),可以方便地映射存儲過程。也就是說,[這裏是Scott Guthrie的一篇文章](http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-sql-part-6-retrieving-data-using-stored- procedures.aspx)描述如何使用Linq to SQL映射和調用存儲過程。 – 2013-04-24 08:34:03
您是否看過我評論中的最後一句話? – 2013-04-24 10:23:23