Использование «пользовательских типов данных» со структурой сущностей - PullRequest
2 голосов
/ 23 июня 2010

Я хотел бы знать, возможно ли сопоставить некоторые столбцы базы данных с пользовательским типом данных (пользовательским классом) вместо базовых типов данных, таких как string, int и так далее. Я попытаюсь объяснить это лучше на конкретном примере:

Допустим, у меня есть таблица, в которой один столбец содержит (текстовые) данные в специальном формате (например, число, за которым следует символ разделителя, а затем некоторая произвольная строка). Например. таблица выглядит так:

Table "MyData":

 ID |Title(NVARCHAR) |CustomData (NVARCHAR) 
 ---+----------------+-----------------------
 1  |Item1           |1:some text  
 2  |Item2           |333:another text  

(Предположим, мне не разрешено изменять базу данных) В моей модели предметной области мне бы хотелось, чтобы эта таблица была представлена ​​двумя классами, например, как то так:

public class MyData
{
  public int ID { get; set; }
  public string Title { get; set; }
  public CustomData { get; set; }
}
public class CustomData
{
  public int ID { get; set; }
  public string Text { get; set; }

  public string SerializeToString()
  {
    // returns the string as it is stored in the DB
    return string.Format("{0}:{1}", ID, Title);
  }
  public string DeserializeFromString(string value)
  {
    // sets properties from the string, e.g. "1:some text"
    // ...
  }
}

Предоставляет ли структура сущностей (V4) способ создания и использования таких "пользовательских типов данных"?

1 Ответ

1 голос
/ 23 июня 2010

Нет. Во всяком случае, не так.

Однако вы можете обойти это следующим образом:

  • Напишите функцию DB для сопоставления, а затем используйте определяющий запрос в SSDL.
  • Использование одного типа для отображения EF и другого типа, как показано выше, а затем проецирование.
  • Добавьте свойства расширения к вашему типу EF, чтобы сделать этот перевод. Вы не можете использовать их в L2E, но это может быть удобно в другом коде.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...