Вопрос

Описание: Я попытался разделить определенные сегменты домена на разные DbContexts.

У каждого есть несколько DbSetс, но есть некоторые DbSets, которые являются общими, например UserProfile.

Причиной такого разделения является скорость, с которой генерируется модель, и простота (меньше наборов в объекте, помогает intellisense).

Однако я не уверен в том, что именно принадлежит сгенерированной модели.

Вопрос 1: Включена ли в модель каждая сущность, которая транзитивно связана с сущностями, для которых DbSet существует в DbContext?

Q2: Если да, то означает ли это, что с точки зрения производительности разделение домена на разные контексты не имеет смысла, поскольку все, что подключено, все равно попадает в модель, независимо от того, какая именно DbSetы указаны в DbContext?

Где я могу найти более подробную информацию о том, как генерируется модель?Я прочитал книгу о EntityFramework и CodeFirst и не смог найти эту конкретную информацию...

Это было полезно?

Решение

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

Entity Framework не заставляет вас создавать DbSets для всех сущностей.Это может быть удобно, если вы хотите "ограничить" доступ дочерних объектов только через их родителей.

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

Вы могли бы прочитать (некоторые части) исходного кода Entity Framework, он с открытым исходным кодом и доступен на CodePlex чтобы узнать больше о том, как строится модель.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top