使用Linq将CLR对象保存为二进制

时间:2011-02-26 21:36:24

标签: linq-to-sql clr

是否可以定义自定义类型转换器,以便我可以使用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   

似乎我应该能够以某种方式实现这种类型的转换器。

2 个答案:

答案 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