.net 如何在CLR存储过程中使用实体框架?

.net 如何在CLR存储过程中使用实体框架?,.net,sql-server,entity-framework,stored-procedures,sqlclr,.net,Sql Server,Entity Framework,Stored Procedures,Sqlclr,我期待着将所有逻辑(实现为操作EntityFramework4对象)移动到服务器端。它看起来很简单(感谢应用程序结构)而且很有用(因为我只有一台老式的笔记本电脑作为客户端和一台运行SQLServer2008的服务器,为逻辑构建一个单独的服务只会比在数据库中实现更大的延迟) 那么,如何在CLR存储过程中正确使用Entities框架,并使用主机服务器提供的SqlContext 突然,我在网上找不到任何例子。看来还没有人吃过这个。这是否意味着这项任务是荒谬的,我绝对不应该这样做?直接使用t-SQL和a

我期待着将所有逻辑(实现为操作EntityFramework4对象)移动到服务器端。它看起来很简单(感谢应用程序结构)而且很有用(因为我只有一台老式的笔记本电脑作为客户端和一台运行SQLServer2008的服务器,为逻辑构建一个单独的服务只会比在数据库中实现更大的延迟)

那么,如何在CLR存储过程中正确使用Entities框架,并使用主机服务器提供的SqlContext


突然,我在网上找不到任何例子。看来还没有人吃过这个。这是否意味着这项任务是荒谬的,我绝对不应该这样做?直接使用t-SQL和access表而不是EF类不会很方便,因为我的模型大量使用继承,并且每种类型都有一个非常复杂的表结构,其中包含许多非常简单的表。

您不能-至少现在不能。SQL Server 2005到2008 R2中包含的CLR是.NET 2.0 CLR,实体框架4需要.NET 4框架

所以现在,在SQL-CLR方法中执行操作时,您仅限于使用ADO.NET 2.0


更大的问题仍然存在:究竟为什么要在SQL-CLR函数中使用EF4?这些是存储过程、用户定义函数、用户定义聚合,但肯定不是全面的数据库应用,真的…

不,你不能。VisualStudio甚至不允许您添加文件或项目类型。(那太糟糕了,我想这样做也是为了处理一些非常复杂的逻辑。)

我们中的一些人并不热衷于在两个或更多的地方维护数据库模式元数据。EF很适合这样做,但是如果想利用SQL-CLR的性能优势,必须在其上下文中定义模式。目前,这意味着SQL-CLR程序集中有一个自定义元数据代码,它生成DDL来定义数据库并将其导入EF。

对于SQL Server 2008 R2或更高版本,它似乎可以使用.NET版本。4.0. 看

我对我的SQL Server 2010开发者版本运行以下命令:

select value from sys.dm_clr_properties where name = 'version'
并得到以下输出:

v4.0.30319


“还没有人这样做”…应该会给我们敲响警钟。这不是应该使用CLR存储过程的方式。这并不完全正确。首先,SQLServer2008R2的CLR版本仍然是2.0,但它可以使用框架版本3.5。而且,仅仅因为SQL Server 2012、2014和2016的CLR版本是4.0,并不意味着您可以导入任何您想要的框架DLL。它仍然必须是纯MSIL库/DLL。如果它是混合的,那么它将不会导入,即使它是正确的CLR版本。