O que está incluído no modelo DbContext?
-
21-12-2019 - |
Pergunta
Descrição: Tentei separar determinados segmentos de domínio em diferentes DbContext
S.
Cada um tem vários DbSet
sim, mas existem alguns DbSet
s que são compartilhados, por exemplo, o UserProfile
.
O motivo dessa separação é a velocidade com que o modelo é gerado e a simplicidade (menos conjuntos em um objeto, ajuda no intellisense).
No entanto, não tenho certeza sobre o que exatamente pertence ao modelo gerado.
P1: Todas as entidades que estão transitoriamente conectadas às entidades, para as quais existe um DbSet em um DbContext, estão incluídas no modelo?
Q2: Se assim for, isso significaria que, em termos de desempenho, não serve para nada separar o domínio em contextos diferentes, uma vez que tudo o que está conectado acaba no modelo de qualquer maneira, não importa qual DbSet
s são indicados no DbContext
?
Onde posso encontrar mais informações sobre como o modelo é gerado?Li um livro sobre EntityFramework e CodeFirst e não consegui encontrar essa informação específica...
Solução
Respondendo ao seu primeira pergunta:sim, todas as relações são modeladas incluindo as entidades de ambos os lados, portanto, cada entidade conectada por uma propriedade de navegação a uma entidade incluída também será incluída no modelo, independentemente de haver um DbSet
por isso ou não.
Entity Framework não força você a criar DbSets
para todas as entidades.Isso pode ser útil se você quiser "restringir" entidades filhas para que sejam acessíveis apenas por meio de seus pais.
Em relação ao seu segunda questão:separar seus contextos ainda poderá melhorar o desempenho, se nem todas as entidades pertencentes a um contexto forem acessíveis por meio de propriedades de navegação de entidades pertencentes ao outro contexto.Lá poderia ser um custo adicional associado à inclusão explícita de mais DbSets
em um contexto também.
Você pode ler (algumas partes) do código-fonte do Entity Framework, é de código aberto e está disponível no CodePlex para saber mais sobre como o modelo é construído.