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

Linq to sql 使用Linq将CLR对象保存为二进制,linq-to-sql,clr,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 Colu

是否可以定义自定义类型转换器,以便使用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   
似乎我应该能够以某种方式实现此类型转换器。

使用Color.ToArgb()和FromArgb()来回转换为可以存储在数据库列中的int值。如果您真的想这样做,那么您可以使用ColorConverter类来来回转换为字符串,您可以将这些内容填充到PixelColor列中。不过,使用整型列类型更有效。

谢谢Hans

对我来说,完整的解决方案是在我的LINQtoSQL类中有两个属性。一种是ColorDb,它的类型为system.Int32,直接映射到数据库字段。它是由设计师自动创建的。此属性设置为私有。第二个公共属性ColorClr的类型为System.Drawing.Color,它执行转换并公开正确键入的数据

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

在SQL Server数据库中为颜色创建新的数据类型,并将System.Drawing.color映射到此新类型。