Parameters 如何将用户定义的类型传递给SqlParameterCollection.AddWithValue?

Parameters 如何将用户定义的类型传递给SqlParameterCollection.AddWithValue?,parameters,types,sqlcommand,implicit-typing,Parameters,Types,Sqlcommand,Implicit Typing,我有一个名为StudentID的自定义数据类型,它隐式转换为字符串 当我将StudentID实例传递给SqlCommand.Parameters.AddWithValue(作为值)并执行该命令时,我收到以下错误: No mapping exists from object type StudentID to a known managed provider native type. 为参数指定类型(如SqlDbType.NVarChar)没有帮助。唯一有效的方法是显式地将StudentID值转

我有一个名为
StudentID
的自定义数据类型,它隐式转换为字符串

当我将
StudentID
实例传递给
SqlCommand.Parameters.AddWithValue
(作为值)并执行该命令时,我收到以下错误:

No mapping exists from object type StudentID to a known managed provider native type.
为参数指定类型(如
SqlDbType.NVarChar
)没有帮助。唯一有效的方法是显式地将
StudentID
值转换为字符串,这与隐式转换的目的背道而驰

我猜这个框架没有考虑可用的转换。我可以对
StudentID
类做些什么,使命令在不需要显式转换为基元类型的情况下处理它吗

讨论如何处理基元类型,但不讨论用户定义的类型。最接近的匹配项是object,它说它是作为变量传递的


确切的故障点在System.Data.SqlClient.MetaType.GetMetaTypeFromValue方法中,带有签名
私有静态元类型GetMetaTypeFromValue(类型数据类型、对象值、布尔推断)
。反射显示它查找原始类型,如果类型代码是object,它会查找Sql*数据类型,例如SqlBoolean,因此它似乎在查找非常特定的基本类型或Sql*类型。

我知道,您无法传递UDT。只允许使用基元类型或Sql*类型。

似乎可以将
SqlUserDefinedTypeAttribute
与自定义类型一起使用。看看
GetMetaTypeFromValue

的当前实现,从我阅读的内容来看,它也不支持null,这是荒谬的,因为向数据库传递数据和从数据库传递数据似乎是引入null类型的核心原因。