Когда использовать принадлежащие типы сущностей против простого создания внешнего ключа или добавления столбцов непосредственно в таблицу? - PullRequest
0 голосов
/ 30 мая 2018

Я читал о принадлежащих типах сущностей здесь https://docs.microsoft.com/en-us/ef/core/modeling/owned-entities#feedback, и мне было интересно, когда я это использую.Особенно при использовании .ToTable();, хотя я не уверен, что ToTable создает связь с ключами.

Я прочитал всю статью, так что я понимаю, что это по сути вынуждает вас обращаться к данным через свойства nav и предотвращает владение таблицейот того, чтобы рассматриваться как сущность.Они также говорят, что Include() не требуется, и данные поступают с каждым запросом к родительской таблице, поэтому не похоже, что вы уменьшаете объем возвращаемых данных.

Так в чем смысл?Также какой смысл "разделения таблицы"?

1 Ответ

0 голосов
/ 31 мая 2018

Он заменяет сложные типы с возможностью установить их как отношение 1-1 / w ToTable при автоматической загрузке.Это будет использовать один и тот же PK в обеих таблицах, так же как 1-1.

Точка разделения таблицы будет состоять в том, что вам нужна нормализованная объектная модель, а структура таблицы - нет.Это подходит для сценариев, где у вас есть существующая структура таблицы и вы хотите разделить связанные части этих данных на дочерние объекты, связанные с основным объектом.С опцией ToTable это будет похоже на отношение 1-1, но автоматически загружается.Однако при рассмотрении причин использования отношения 1-1 я бы посчитал этот вариант плохим выбором.

Распространенные причины использования его в нормальных отношениях 1-1 включают:

  • Разделение дорогих для загрузки, редко используемых данных.(images, binary, memo)
  • Инкапсуляция данных, относящихся к одному приложению из общей сущности.то есть, если у меня есть «Клиент», который используется системой выставления счетов против CRM, у меня могут быть «CustomerBillingData» и «CustomerCRMData», принадлежащие «Клиенту», а не унаследованный BillingCustomer / CRMCustomer.Так как есть «одиночный» клиент, который может обслуживать одну или обе системы.Биллинг не заботится о данных CRM, CRM не заботится о биллинге.Если все данные в «Заказчике», то обе системы потенциально должны быть обновлены, и я не могу полагаться на ограничения, когда данные являются необязательными для другой системы.Используя композицию, я могу применить требуемые данные для конкретной системы.

Ни в одном из этих случаев я не хотел бы использовать разбиение таблиц или что-либо, что автоматически загружается, поэтому Owned Types / w ToTable будетне заменять 1-1 отношения на любой отрезок.По сути, это более строгая версия сложных типов, я бы сказал, что она строго используется для организации сущностей.Не то, чтобы я признался, что хочу использовать очень часто.

...