Использование пользовательского типа данных в Linq to SQL - PullRequest
1 голос
/ 06 июля 2010

Есть ли способ использовать пользовательский тип данных в сущности, возвращаемой Linq в SQL?

Скажем, у меня есть такой тип данных:

public struct CustomerNumber : IEquatable<string>
{
    private string _value;

    public static implicit operator CustomerNumber(string value)
    {
        return new CustomerNumber { _value = value };
    }

    ...
}

Он также определяет операторы для ==! = И т. Д.

Когда я пытаюсь заменить одно из свойств в возвращаемом объекте, я получаю исключение Invalid cast from 'System.String' to 'CustomerNumber', даже если вы можете назначить CustomerNumber из строки.

Это невозможно или я что-то не так делаю?

Редактировать - Уточнение:

CustomerNumber используется в качестве типа данных для объекта, который генерируется Linq to SQL. Исключение возникает при попытке запроса к базе данных. Это не то, что я пытаюсь разыграть, а где-то внутри магии LinqToSQL что-то идет не так.

Мой код выглядит примерно так:

var customers = DataContext.Customers;

Edit:

Оказывается, что если ваша структура реализует явный оператор, он работает или, скорее, он работает со структурой, которая реализует явный оператор для преобразования из строки в тип, но не для преобразования из System.Int32 к типу.

Редактировать еще раз: все равно не работает.

Ответы [ 2 ]

1 голос
/ 06 июля 2010

Я думаю, что единственный способ сделать это - записать его как свойство в частичном классе, который генерирует L2S. Если вы сделаете свойство Column закрытым, вы можете оставить его в виде строки, а затем просто использовать его в качестве резервного хранилища для своего пользовательского свойства, отображающего ваш пользовательский тип.

0 голосов
/ 17 февраля 2015

Правильный подход (из MSDN ):

Если класс реализует Parse () и ToString (), вы можете сопоставить объект любому текстовому типу SQL (CHAR, NCHAR, VARCHAR, NVARCHAR, TEXT, NTEXT, XML).Объект сохраняется в базе данных путем отправки значения, возвращаемого функцией ToString (), в столбец сопоставленной базы данных.Объект восстанавливается путем вызова Parse () для строки, возвращаемой базой данных.

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