是否可以定义自定义类型转换器,以便我可以使用Linq将CLR对象保存到sql字段中?
看起来这个功能应该可用。 Visual Studio 2010 Linq-to-Sql设计器为每个自动生成的CLR属性公开Type属性。
但是,当我将type属性设置为system.drawing.color时,我收到错误:
Error 1 DBML1005: Mapping between DbType 'Binary(4)'
and Type 'System.Drawing.Color' in Column 'PixelColor' of Type 'Character'
is not supported. 0 0
似乎我应该能够以某种方式实现这种类型的转换器。
答案 0 :(得分:1)
使用Color.ToArgb()和FromArgb()来回转换为可以存储在dbase列中的int值。如果真的想要那么你可以使用ColorConverter类来回转换为字符串,你可以在PixelColor列中填充。使用整数列类型是一种更有效的方法。
答案 1 :(得分:1)
谢谢汉斯。
对我来说,完整的解决方案是在我的Linq-to-Sql类中有2个属性。一个是ColorDb,它有一个类型system.Int32并直接映射到数据库字段。它由设计师自动创建。此属性设置为私有。具有System.Drawing.Color类型的第二个公共属性ColorClr执行转换并公开正确键入的数据。
Partial Public Class MyObject
Public Property ColorClr As System.Drawing.Color
Set(ByVal value As Color)
Me.ColorDb = value.ToArgb
End Set
Get
Return Color.FromArgb(Me.ColorDb)
End Get
End Property
End Class