将实体框架CLR DLL添加到SQL Server数据库

将实体框架CLR DLL添加到SQL Server数据库

问题描述:

我有一个在SQL Server Express 2012数据库的CRUD操作中密集的程序。我希望创建一个包含大部分代码的CLR程序集,然后将其附加到数据库,以便它保留在服务器上。我希望在特定的表中的每一行上执行资源密集型计算,然后将该计算的结果输入到该表中的一列(不参与计算本身)。我希望它保留在服务器上,这样服务器就可以自动进行计算,而无需前端应用程序调用它,并且不需要应用程序必须从服务器来回提交TSQL。我也想用Entity Framework在VB.NET中编写代码,以使事情更轻松。将实体框架CLR DLL添加到SQL Server数据库

在我编写真正的程序之前,我决定尝试使用AdventureWorks2012的这种方法。我在Visual Studio中创建了一个类库,然后以发布模式构建。然后我进入SQL Server Management Studio,右键单击Databases> AdventureWorks2012> Programmability> Assemblies节点,然后单击“New Assembly ...”,导航到我的内置DLL并单击确定,但是SQL Server Management Studio为我提供了这个错误信息:

TITLE: Microsoft SQL Server Management Studio 
------------------------------ 

Create failed for SqlAssembly 'AdventureWorks_01'. (Microsoft.SqlServer.Smo) 

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=11.0.5058.0+((SQL11_PCU_Main).140514-1820+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Create+SqlAssembly&LinkId=20476 

------------------------------ 
ADDITIONAL INFORMATION: 

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo) 

------------------------------ 

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

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=11.00.5058&EvtSrc=MSSQLServer&EvtID=6503&LinkId=20476 

------------------------------ 

我注意到,这要求一个entityframework装配,并有一个build文件夹,所以我试图用同样的方法添加它,但我收到此错误信息:

TITLE: Microsoft SQL Server Management Studio 
------------------------------ 

Create failed for SqlAssembly 'EntityFramework'. (Microsoft.SqlServer.Smo) 

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=11.0.5058.0+((SQL11_PCU_Main).140514-1820+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Create+SqlAssembly&LinkId=20476 

------------------------------ 
ADDITIONAL INFORMATION: 

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo) 

------------------------------ 

Assembly 'system.runtime.serialization, version=4.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089.' was not found in the SQL catalog. 
Warning: The Microsoft .NET Framework assembly 'entityframework, version=6.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089, processorarchitecture=msil.' you are registering is not fully tested in the SQL Server hosted environment and is not supported. In the future, if you upgrade or service this assembly or the .NET Framework, your CLR integration routine may stop working. Please refer SQL Server Books Online for more details. (Microsoft SQL Server, Error: 6503) 

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=11.00.5058&EvtSrc=MSSQLServer&EvtID=6503&LinkId=20476 

------------------------------ 

我还在该文件夹中看到一个名为EntityFramework.SqlServer.dll的DLL,所以我试图添加它,但它产生了第一个错误 信息。

这里是我的VB代码:

Public Class Class1 
    Sub AddNewProduct() 
     Dim adWorks As New AdventureWorks2012Entities() 
     Dim myProduct = New Product() 

     With myProduct 
      'add applicable product info here 
     End With 

     adWorks.Products.Add(myProduct) 
    End Sub 
End Class 

有谁知道我该如何解决这个问题,或者如果我能在第一时间加入实体框架CLR组件到SQL Server数据库?

+0

似乎一个奇怪的事情做一个部分,添加这些组件到SQL Server。你的程序会在服务器上运行吗?试图将这些程序集放到Sql Server中的原因是什么? – 2014-10-28 13:36:54

+0

我希望做的是让数据驻留在服务器上。根据这些数据,将对特定表格中的每一行执行资源密集型计算,然后将该计算结果输入该表格中的一列(不涉及计算本身)。我希望这将留在服务器上,以便服务器可以自动进行计算,而无需前端应用程序调用它,并且不需要应用程序必须从服务器来回提交TSQL。 – 2014-10-29 21:06:04

+1

似乎更容易,也更合适,编写一个控制台应用程序或Windows服务,住在服务器上来做到这一点。 – 2015-03-20 04:52:50

您需要加载链中的所有相关程序集,因为某些程序集依赖于其他程序集。即System.Runtime.Serialization也需要加载t/b。此外MSDN对这个话题一整节希望这些链接将帮助:

(支持.NET Framework库)
http://msdn.microsoft.com/en-us/library/ms403279.aspx
对于不支持的组件它还挺意味着SQL Server上没有预装组件只需添加他们通过在SSMS创建装配(请参阅本MSDN文档)或者你已经做

(CLR集成编程模型限制)
http://msdn.microsoft.com/en-us/library/ms403273.aspx

MSDN上你还可以看到调试SQL CLR代码

+0

感谢您的输入,@KVigor,但我仍然有问题(特别是'权限集')。你能给我一个演练吗? – 2015-01-02 17:11:02