.net - 为自定义类型创建 ADO.NET 映射

标签 .net database

我有一个我创建的自定义类型,它应该作为 guid 保存在数据库(在本例中为 SQL 服务器)中(尽管这个问题对于可以存储为字符串、整数的对象同样有效, ETC)。

当我将此类型作为参数传递给 DbCommand 对象时,出现异常:

ArgumentException: No mapping exists from object type [...] to a known managed provider native type.

我在类上有 CType 运算符,允许隐式转换为字符串或 guid,但 .NET 不使用这些运算符,因为它不知道它应该转换类型。

有没有办法向内部映射添加类型,或者告诉 .NET 如何将我的自定义类型存储在数据库中?

我显然可以在将类型传递给 .NET 时自己转换类型,但我希望这会自动发生,就像对大多数内置类型所做的那样。


我已经尝试为我的类型实现一个 TypeConverter 类(继承自 TypeConverter,覆盖 CanConvertFrom、CanConvertTo、ConvertFrom、ConvertTo、IsValid,并将 System.ComponentModel.TypeConverter 属性添加到我的类),但这仍然没有不工作。

我假设它缺少一段告诉 .NET 在将值存储在数据库中时要转换为什么类型的部分。


目前,我的解决方法是在将参数列表传递给 SQL Server 之前拦截参数列表,并使用一种方法将我的自定义类型更改为 guid。这很脏,但它现在确实有效,但我仍然认为这个问题没有答案。

最佳答案

根据 How should I pass a user-defined type to SqlParameterCollection.AddWithValue? , 这是不可能的。我也查看了 GetMetaTypeFromValue 方法,看起来所有映射实际上都硬编码在框架中,因此不可能有用户定义的映射。

多么烦人,拥有一个定义给定类型映射的属性真的很有用。

关于.net - 为自定义类型创建 ADO.NET 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/398325/

相关文章:

sql - 如何从没有 id 的表中删除重复(重复)记录和行

c# - MSChart 如何更改一系列破折号之间的间距

c# - 查询字符串值的 .NET 正则表达式

java - 将 Java fx 应用程序连接到远程托管数据库

sql - 在像 StackOverflow 这样的网站中,问题及其投票应该是单独的表格吗?

java - 拦截对数据库的查询

.net - 如何在 EF Code First 中映射表拆分?

.net - Windows 7 上 mscoree.dll 的位置和实例

c# - 在 C# 中使用 p12 证书从 SFTP 下载文件

ruby-on-rails - 关闭 Rails 中的 "updated_at"列