2010-05-08 107 views
3

我期待将所有的逻辑(这是作为操纵实体框架4对象实现)移动到服务器端。它看起来很简单(感谢应用程序结构)并且非常有益(因为我拥有的只有一台老旧的笔记本电脑作为客户端和一台运行SQL Server 2008的强大服务器,并且为逻辑建立单独的服务可以引入更多的延迟如果与在数据库中进行比较)。如何在CLR存储过程中使用实体框架?

那么如何正确使用CLR存储过程中的实体框架并使其使用主机服务器提供的SqlContext?

突然之间,我在网上找不到任何例子。看起来还没有人用餐。这是否意味着这项任务是荒谬的,我绝对不应该那样做?直接使用T-SQL和访问表将不会很方便,而不是EF类,因为我的模型大量使用继承,并且具有非常复杂的包含很多非常简单表的表 - 每类结构。

+3

“迄今还没有这样做“......应该敲响一些钟声。这不是CLR存储过程应该使用的方式。 – 2010-05-08 09:03:18

回答

1

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

2

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

因此,现在,在执行SQL-CLR方法内部的东西时,仅限于直接使用ADO.NET 2.0。

然后问题依然存在:为什么要在SQL-CLR函数中使用EF4?这些是为了存储过程,用户定义的函数,用户定义的聚合 - 但肯定不是全面的数据库应用程序,真的...

2

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

1

似乎与SQL Server 2008 R2或更高版本,你可以,它使用.NET版本。 4.0。见this blog

我对我的SQL Server运行以下命令2010开发人员Eeition:

select value from sys.dm_clr_properties where name = 'version' 

,并得到了以下的输出:

v4.0.30319

+0

这不完全正确。首先,SQL Server 2008 R2的CLR版本仍然是2.0,但它可以使用Framework Version 3.5。而且,仅仅因为SQL Server 2012,2014和2016的CLR版本是4.0,这并不意味着你可以导入任何你想要的框架DLL。它仍然必须是纯MSIL库/ DLL。如果它被混合,那么它将不会导入,即使它是正确的CLR版本。 – 2015-08-28 16:07:56