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

相关问题