2010-05-08 111 views
3

我期待將所有的邏輯(這是作爲操縱實體框架4對象實現)移動到服務器端。它看起來很簡單(感謝應用程序結構)並且非常有益(因爲我擁有的只有一臺老舊的筆記本電腦作爲客戶端和一臺運行SQL Server 2008的強大服務器,並且爲邏輯建立單獨的服務可以引入更多的延遲如果與在數據庫中進行比較)。如何在CLR存儲過程中使用實體框架?

那麼如何正確使用CLR存儲過程中的實體框架並使其使用主機服務器提供的SqlContext?

突然之間,我在網上找不到任何例子。看起來還沒有人用餐。這是否意味着這項任務是荒謬的,我絕對不應該那樣做?直接使用T-SQL和訪問表將不會很方便,而不是EF類,因爲我的模型大量使用繼承,並且具有非常複雜的包含很多非常簡單表的表 - 每類結構。

+3

「迄今還沒有這樣做「......應該敲響一些鐘聲。這不是CLR存儲過程應該使用的方式。 – 2010-05-08 09:03:18

回答

1

不,你不能。 Visual Studio甚至不會讓你添加文件或項目類型。 (這太糟糕了,我想這樣做也是爲了處理一些非常複雜的邏輯。)

2

你不能 - 至少現在不行。包含在SQL Server 2005到2008 R2中的CLR是.NET 2.0 CLR - 實體框架4需要.NET 4框架。

因此,現在,在執行SQL-CLR方法內部的東西時,僅限於直接使用ADO.NET 2.0。

然後問題依然存在:爲什麼要在SQL-CLR函數中使用EF4?這些是爲了存儲過程,用戶定義的函數,用戶定義的聚合 - 但肯定不是全面的數據庫應用程序,真的...

2

我們中有些人並不那麼熱衷於在兩個或更多地方維護數據庫模式元數據。 EF非常適合這樣做,但如果想要使用SQL-CLR的性能優勢,則必須在其上下文中定義模式。目前,這意味着SQL-CLR程序集中的自定義元數據代碼生成DDL以定義數據庫並將其導入EF。

1

似乎與SQL Server 2008 R2或更高版本,你可以,它使用.NET版本。 4.0。見this blog

我對我的SQL Server運行以下命令2010開發人員Eeition:

select value from sys.dm_clr_properties where name = 'version' 

,並得到了以下的輸出:

v4.0.30319

+0

這不完全正確。首先,SQL Server 2008 R2的CLR版本仍然是2.0,但它可以使用Framework Version 3.5。而且,僅僅因爲SQL Server 2012,2014和2016的CLR版本是4.0,這並不意味着你可以導入任何你想要的框架DLL。它仍然必須是純MSIL庫/ DLL。如果它被混合,那麼它將不會導入,即使它是正確的CLR版本。 – 2015-08-28 16:07:56