如果有人可以就我的问题提出建议,我会很感激。
我有一个EF版本为4.5的类库项目。
该项目的 App.Config
<?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时,出现错误:
程序集'entityframework,version = 5.0.0.0,culture = neutral,publickeytoken = b77a5c561934e089。'在SQL目录中找不到。 (错误:6503)
我做错了什么?
非常感谢。
答案 0 :(得分:4)
SQL Server的CLR主机受到设计的限制/限制。以下是受支持的.NET Framework库列表(找到here)。请注意,它是一个相当短的列表,并且实体框架不在其中。
我无法想象为什么在数据库本身内部运行时需要加载数据访问框架。公平地说,如果您将它们全部加载为UNSAFE
,可以执行此操作,假设它们都是纯MSIL并且没有混合。但是,加载_un_supported .NET Framework库的几个风险之一是,如果它们随时间变化(通过Windows Update或手动更新),那么在SQL Server中运行的代码可能会停止工作。如果它只是一个更新版本,那么您需要手动更新必须加载到SQL Server中的相关.NET Framework DLL,以便首先使其工作。但是,如果其中一个DLL在更新中更改为混合,那么您将无法将更新的版本加载到SQL Server中,并且必须将代码更改为不再需要该DLL。
但是,如果你加载它,然后在引用EF DLL的完整路径时执行CREATE ASSEMBLY
,它应该自动引入所有依赖项。
总而言之,您确定需要将任何DLL加载到SQL Server中吗?对于在SQLCLR中运行的任何内容,没有理由拥有app.config
文件。