Что включено в модель DbContext?
-
21-12-2019 - |
Вопрос
Описание:
Я попытался разделить определенные сегменты домена на разные DbContext
s.
У каждого есть несколько DbSet
с, но есть некоторые DbSet
s, которые являются общими, например UserProfile
.
Причиной такого разделения является скорость, с которой генерируется модель, и простота (меньше наборов в объекте, помогает intellisense).
Однако я не уверен в том, что именно принадлежит сгенерированной модели.
Вопрос 1: Включена ли в модель каждая сущность, которая транзитивно связана с сущностями, для которых DbSet существует в DbContext?
Q2: Если да, то означает ли это, что с точки зрения производительности разделение домена на разные контексты не имеет смысла, поскольку все, что подключено, все равно попадает в модель, независимо от того, какая именно DbSet
ы указаны в DbContext
?
Где я могу найти более подробную информацию о том, как генерируется модель?Я прочитал книгу о EntityFramework и CodeFirst и не смог найти эту конкретную информацию...
Решение
Отвечая на ваш первый вопрос:да, все отношения моделируются, включая объекты с обеих сторон, поэтому каждый объект, связанный свойством навигации с включенным объектом, также будет включен в модель независимо от того, есть ли DbSet
за это или нет.
Entity Framework не заставляет вас создавать DbSets
для всех сущностей.Это может быть удобно, если вы хотите "ограничить" доступ дочерних объектов только через их родителей.
Относительно вашего второй вопрос:разделение ваших контекстов все еще может повысить производительность, если не все объекты, принадлежащие одному контексту, доступны через навигационные свойства объектов, принадлежащих другому контексту.Там мог быть дополнительными расходами, связанными с явным включением большего количества DbSets
и в определенном контексте тоже.
Вы могли бы прочитать (некоторые части) исходного кода Entity Framework, он с открытым исходным кодом и доступен на CodePlex чтобы узнать больше о том, как строится модель.