【发布时间】:2023-03-06 03:37:01
【问题描述】:
我正在 Microsoft .NET Framework 4.5.2 中编写一个程序集,该程序集定义了要在数据库连接两端(在数据库内部以及 .NET 端的 DataTable)上使用的类型。
服务器正在运行 SQL Server 2008 R2。
SQL Server CLR 版本是 v2.0.50727,windows server 上的 .NET 版本(2008 R2 也是)是 4.5.2。
由于 CLR 版本,SQL Server 实例将仅支持 .NET 3.5 及更低版本。如果不立即升级到 SQL Server 2012,我无法更改它,因为这是一个生产服务器,但我已经围绕 ASP.Net 4.5.2 构建了一个应用程序,我不相信我现在可以将其更改为使用 3.5。我对这些类型的经验是,它们在数据连接的两端必须相同。
我要么必须将 4.5.2 类型的 .dll 强制限制为 CLR v2,强制编译器允许混合版本的 .NET 程序集,要么找到另一种方法绕过 SQL Server 2008 R2 上的 CLR v2 限制。
在我正在使用的时间范围内无法升级 SQL Server 实例。
有没有人能解决这个问题?
更新:
作为解决方案的一部分,我在类型类定义中实现了 IBinarySerialize 和 Serialize 接口。我在 ToString() 和 Parse 方法中使用 XDocument。
在 .NET 方面,我使用存储过程调用和 Dapper ORM 来执行 CRUD 操作。自定义类型必须使用 ToString() 方法发送到 SQL Server 实例,并且在使用 SQL Server 的 Write 实现存储之前,该类型由 SQL Server 使用 Parse 方法解析。
使用 Read 方法从记录中获取数据并使用 ToString() 方法发送到 .NET 端。在 .NET 端,返回值随后通过 .NET 接口使用反射存储在使用 Parse 方法的类型中。
反射接口要求 .NET 类型与 SQL Server 程序集类型匹配。发送到 .NET 反射接口的信息包括有关创建被发送到 .NET 端的信息的类型程序集的信息。
我想底线是我需要一种方法来欺骗反射接口,使其相信使用 .NET 3.5 创建的类型与以相同方式声明的 .NET 4.5.2 类型相同。
【问题讨论】:
标签: sql-server sql-server-2008-r2 sqlclr asp.net-4.5