1

如果有人能就我的問題提出建議,我將不勝感激。將程序集添加到SQL Server 2012時出錯

我有EF版本4.5的類庫項目。

項目

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/> 
    </configSections> 
    <connectionStrings> 
    <add name="Entities" connectionString="..." providerName="System.Data.EntityClient"/> 
    <add name="REPORTSEntities" connectionString="..." providerName="System.Data.EntityClient"/> 
    </connectionStrings> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/> 
    </entityFramework> 
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration> 

當我嘗試添加dll到SQL Server 2012的App.Config,我得到的錯誤:

Assembly 'entityframework, version=5.0.0.0, culture=neutral,publickeytoken=b77a5c561934e089.' was not found in the SQL catalog. (Error:6503)

我在做什麼錯?

非常感謝。

+0

嘗試將所需的EntityFramework程序集首先添加到SQL Server中 – opewix 2014-12-19 04:36:00

+0

@JesseJames,當我嘗試添加它時出現另一個錯誤:未找到system.data.entity。您正在註冊的assebmly entityframework未在SQL Server託管環境中完全測試,因此不受支持。將來,如果您升級或維護此程序集或.NET框架,您的CLR集成例程可能會停止工作。 – 2014-12-19 04:47:47

+0

檢查這個線程。它關於你的錯誤。 http://stackoverflow.com/questions/2304357/how-to-reference-gac-assemblies-when-integrating-a-clr-extension-into-sql-server – opewix 2014-12-19 04:50:22

回答

4

SQL Server的CLR主機相當受限於設計。以下是受支持的.NET Framework庫列表(找到了here)。請注意,它是一個相當短的列表,而Entity Framework不在其中。

  • CustomMarshalers
  • Microsoft.VisualBasic程序
  • Microsoft.VisualC
  • 的mscorlib
  • 系統
  • System.Configuration
  • System.Data
  • System.Data.OracleClient的
  • SYSTEM.DAT a.SqlXml
  • System.Deployment
  • System.Security
  • System.Transactions的
  • System.Web.Services
  • 的System.Xml
  • System.Core.dll
  • 的System.Xml。 Linq.dll

我無法想象爲什麼會有一個需要加載數據訪問框架,當你在內部運行數據庫本身。公平地說,你可以可以這樣做,如果你把它們都加載爲UNSAFE,假設它們都是純粹的MSIL而沒有混合。但是,加載不支持.NET框架庫的幾個風險之一是,如果它們隨時間變化(通過Windows Update或手動更新),那麼在SQL Server中運行的代碼可能會停止工作。如果它只是一個更新版本,那麼您需要手動更新必須加載到SQL Server中的相關.NET Framework DLL,以便首先使其工作。但是,如果其中一個DLL在更新中更改爲混合模式,那麼您將無法將更新後的版本加載到SQL Server中,並且必須更改代碼以不再需要該DLL。

但是,如果你確實加載了這個,然後在引用EF DLL的完整路徑時執行CREATE ASSEMBLY,它應該自動地引入所有的依賴關係。

所有人都說,你確定你需要加載任何DLL到SQL Server?對於在SQLCLR中運行的任何內容,沒有理由擁有app.config文件。

+0

問題是我有一個複雜的邏輯來構建存儲過程。這就是爲什麼我決定用C#編寫代碼並在我的sp中使用匯編。這是一個錯誤的方式?任何選擇? – 2014-12-19 05:56:44

+1

@GyuzalR複雜邏輯無疑是使用SQLCLR的一個很好的理由。但在SQLCLR中使用實體框架?我不認爲這是一種好處。它可能並不總是按預期工作。 – 2014-12-19 06:22:40

+0

好的..但是我怎麼能在沒有EF的情況下在我的邏輯中使用數據庫數據呢?使用System.Data.SqlClient的SQL連接類? – 2014-12-19 06:26:50

相關問題