【发布时间】:2014-10-28 02:29:15
【问题描述】:
我有一个程序在 SQL Server Express 2012 数据库上进行密集的 CRUD 操作。我希望创建一个包含大部分代码的 CLR 程序集,然后将其附加到数据库中,以便保留在服务器上。我希望对特定表中的每一行执行资源密集型计算,然后将该计算的结果输入到该表中的一列(不参与计算本身)。我希望它保留在服务器上,以便服务器可以自动进行计算,而无需前端应用程序调用它,也无需应用程序从服务器来回提交 TSQL。我还想使用 Entity Framework 在 VB.NET 中编写代码以使事情变得更容易。
在编写真正的程序之前,我决定使用 AdventureWorks2012 尝试这种方法。我在 Visual Studio 中创建了一个类库,然后以发布模式构建。然后我进入 SQL Server Management Studio,右键单击 Databases > AdventureWorks2012 > Programmability > Assemblies 节点,然后单击“New Assembly...”,导航到我构建的 DLL 并单击 OK,但是 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
有谁知道我可以如何解决这个问题,或者我是否可以首先将 Entity Framework CLR 程序集添加到 SQL Server 数据库?
【问题讨论】:
-
将这些程序集添加到 Sql Server 中似乎很奇怪。你的程序会在服务器上运行吗?尝试将这些程序集放入 Sql Server 的原因是什么?
-
我希望做的是让数据驻留在服务器上。根据这些数据,将对特定表中的每一行执行资源密集型计算,然后将该计算的结果输入到该表的列中(不参与计算本身)。我希望这将保留在服务器上,以便服务器可以自动进行计算,而无需前端应用程序调用它,也无需应用程序从服务器来回提交 TSQL。
-
编写一个小控制台应用程序或驻留在服务器上的 Windows 服务来执行此操作似乎更容易,更合适。
-
感谢您的建议,@Dan-o。我没有想到这种方法。我会尝试一下,看看它是如何工作的。
标签: .net sql-server vb.net entity-framework sqlclr