2011-02-26 28 views
1

是否有可能定義一個自定義類型轉換,這樣我可以節省CLR對象爲使用LINQ一個sql場?使用LINQ保存CLR對象作爲二進制

看起來這種能力應該可用。 Visual Studio 2010 Linq-to-Sql設計器爲每個自動生成的CLR屬性公開了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

爲您的SQL Server數據庫中的顏色創建新的數據類型,並將System.Drawing.Color映射到此新類型。 – kelloti 2011-02-26 23:01:43

回答

1

使用Color.ToArgb()和FromArgb()來回回,你可以在一個dBASE列存儲一個int值轉換。如果你真的想,那麼你可以使用ColorConverter類來回字符串轉換,有些東西你可以塞進你的PixelColor列。但是使用整數列類型更有效率。

1

感謝漢斯。

對我來說,完整的解決方案是在我的LINQ到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