Используйте Linq для сохранения объектов CLR как двоичных - PullRequest
1 голос
/ 27 февраля 2011

Можно ли определить собственный преобразователь типов, чтобы я мог сохранять объекты CLR в поле sql с помощью Linq?

Похоже, эта возможность должна быть доступна. Дизайнер Visual Studio 2010 Linq-to-Sql предоставляет свойство Type для каждого автоматически сгенерированного свойства 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   

Кажется, я должен каким-то образом реализовать этот преобразователь типов.

Ответы [ 2 ]

1 голос
/ 28 февраля 2011

Спасибо, Ганс.

Полное решение для меня состояло в том, чтобы в моем классе Linq-Sql было 2 свойства.Одним из них является 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
1 голос
/ 27 февраля 2011

Используйте Color.ToArgb () и FromArgb () для преобразования туда и обратно в значение int, которое вы можете сохранить в столбце dbase.Если вы действительно хотите, то вы можете использовать класс ColorConverter для преобразования туда и обратно в строку, то, что вы можете вставить в свой столбец PixelColor.Использование целочисленного типа столбца, однако, более эффективно, чем heckofalot.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...