2013-04-24 62 views
2

我必須在我的DB中定義一個自定義函數來計算實體的「有效結束日期」。 該功能將用於存儲過程,但我需要Web應用程序中的相同邏輯。在C#代碼中使用T-SQL自定義函數

我使用LINQ到SQL連接到我的數據庫和映射表上課。所以我想知道是否有重用我的數據庫中定義的函數的方法。我想通過部分類來擴展我的實體。我必須重寫我的代碼中的邏輯嗎?

注意我需要用我的C#代碼功能,而不是存儲過程

+0

我建議你不要使用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

+0

您是否看過我評論中的最後一句話? – 2013-04-24 10:23:23

回答

1

我發現,可以通過調用Linq到-SQL在SQL Server數據庫中定義的函數。

我剛剛導入的功能對象dbml背景文件。所以我可以這樣調用它:

context.fn_my_db_function(param1, param2, etc); 

簡單!

0

您可以創建一個存儲過程,然後在您的DBML設計師可以將它拖動到方法窗格,這會嘗試自動檢測返回類型,輸入和暴露是通過上下文實例。如果需要,可以使用Visual Studio中的Properties視圖將返回類型映射到表模型或自定義的類型。

這就是所謂就像在C#中的功能,例如:

using (var context = new MyDataContext()) { 
    var result = context.MyStoredProcedure(input); 
} 

result將映射的管理型和input將是必需的參數變量(一個或多個)。

0

我一定要重寫我的代碼邏輯?

如果你不希望數據庫執行它(僞):

public static YourReturnType Calculate(this TEntity foo) 
{ 
    return database.ExecuteFunction("calculate", foo); 
} 

如果你不想爲每一個計算數據庫的往返,然後是的,你就必須重寫邏輯C#。

+1

這甚至可以自動生成,不需要創建包裝,除非A)返回類型不能自動確定和/或B)需要添加一些邏輯。 – 2013-04-24 08:39:37

-1

這可能與實體框架。看到這link供您參考。

您可以直接映射你的存儲過程,並創建一個訪問GET方法。

但是,如果你只是想在你的數據庫中執行你創建的過程。 。看到這個link

相關問題