Linq to sql 使用Linq将CLR对象保存为二进制
是否可以定义自定义类型转换器,以便使用Linq将CLR对象保存到sql字段中 看起来这个功能应该是可用的。Visual Studio 2010 Linq to Sql设计器为每个自动生成的CLR属性公开Type属性 但是,当我将type属性设置为system.drawing.color时,会出现以下错误: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
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映射到此新类型。