Оболочка EF Object вокруг примитивного типа в модели DB / Domain - PullRequest
0 голосов
/ 26 января 2019

Предположим, у меня есть таблица контактов в моей базе данных со столбцом PhoneNumber, который представляет собой строку, например, "+44123456789".

В моей доменной модели у меня обычно было бы:

public class Contact {
    public int Id { get; set; }
    public string PhoneNumber { get; set; }
}

Пока что все обычное :) Но теперь я хочу связать кучу не-DB логики с моим PhoneNumber.

Я могу сделать объект PhoneNumber для хранения всей этой логики и сделать вместо этого мое свойство PhoneNumber объектом Number:

public class Contact {
    public int Id { get; set; }
    public Number PhoneNumber { get; set; }
}
public class Number{
    public string Number { get; set; }
    //... other logic, getter wrappers, etc. ...
}

Но EF будет интерпретировать это как «Число - это новый тип с отдельной таблицей, и объект« Контакт »должен иметь FK для строки в таблице« Число »». Что я не хочу - я хочу сохранить модель БД такой же. Я могу просто сделать преобразование вручную, в моем C #, но в итоге у меня будет много шаблонов.

Я бы хотел сказать EF: «Я знаю, что это похоже на объект, но поверьте мне, это примитив. Когда вы храните его в базе данных, это на самом деле примитивный столбец. Пожалуйста, преобразуйте его в и из примитива соответствующим образом (предоставляется классом Number, если необходимо) всякий раз, когда вы взаимодействуете с базой данных.

Существует ли эта концепция в EF?

Если да, то какой правильный критерий поиска для поиска документации по этому вопросу?

Заинтересован в знании EF или EFCore.

1 Ответ

0 голосов
/ 06 февраля 2019

Ответ, любезно предоставленный Иваном Стоевым (см. Комментарии к вопросу):

Похоже, искомый термин "сложный тип" в EF6.

Пример результатов поиска: https://entityframework.net/complex-type

В EFCore похожая (но не идентичная) концепция - «Тип сущности, которой владеют».

Пример результатов поиска: https://docs.microsoft.com/en-us/ef/core/modeling/owned-entities

...