【发布时间】:2009-04-20 06:02:43
【问题描述】:
我有一个名为StudentID 的自定义数据类型,它可以隐式转换为字符串。
当我将StudentID 实例传递给SqlCommand.Parameters.AddWithValue(作为值)并执行命令时,我收到以下错误:
No mapping exists from object type StudentID to a known managed provider native type.
为SqlDbType.NVarChar 之类的参数指定类型没有帮助。唯一可行的是将StudentID 值显式转换为字符串,这违背了隐式转换的目的。
我猜框架不考虑可用的转换。我可以对StudentID 类做些什么来让命令处理它而不需要显式转换为原始类型?
This MSDN article 谈论原始类型的处理方式,而不是用户定义的类型。最接近的匹配是对象,它说它作为 Variant 传递。
确切的故障点在 System.Data.SqlClient.MetaType.GetMetaTypeFromValue 方法中,签名为private static MetaType GetMetaTypeFromValue(Type dataType, object value, bool inferLen)。反射表明它在寻找原始类型,如果 TypeCode 是对象,它会寻找 Sql* 数据类型,例如 SqlBoolean,因此它似乎在寻找非常特定的原始类型或 Sql* 类型。
【问题讨论】:
标签: parameters types sqlcommand implicit-typing