#ef-code-first
#ef-code-first
Вопрос:
Может ли кто-нибудь дать какой-либо совет относительно того, является ли наилучшей практикой иметь один контекст или несколько контекстов?
Например, должен ли у меня быть один контекст следующим образом:
public class MyContext
: DbContext
{
public DbSet<Company> Companies { get; set; }
public DbSet<Country> Countries { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new CountryConfiguration());
modelBuilder.Configurations.Add(new CompanyConfiguration());
base.OnModelCreating(modelBuilder);
}
}
Или было бы лучше создать отдельный контекст для компаний и стран? Итак, ConpanyContext и CountryContext, которые оба будут предоставлять одно свойство DbSet.
Возможно, это просто личный выбор, но наша база данных будет состоять из сотен объектов. Поэтому я хотел бы получить это право для начала.
Большое спасибо,
Пол.
Ответ №1:
Простое эмпирическое правило: одна схема / домен, один контекст.
Комментарии:
1. Я хотел бы сделать это таким образом, если производительность в порядке. Я немного обеспокоен тем, какой будет производительность при создании экземпляра контекста, когда ему приходится иметь дело с более чем 100 конфигурационными классами в OnModelCreating. Это становится еще большей проблемой при использовании этого в службе WCF, при котором при каждом вызове службы будет создаваться новый экземпляр.
2. @Paul: OnModelCreating вызывается ОДИН РАЗ , а не каждый раз, когда вы создаете экземпляр.
Ответ №2:
Если это вообще возможно, попробуйте разделить их по значимым строкам.
100 объектов в контексте могут показаться плохими, но подумайте о вашей альтернативе, 100 различных контекстах?
Затем вам пришлось бы делать такие вещи, как
using(CompanyContext cc = new CompanyContext)
{
}
using (CountryContext cc = new CountryContext)
{
}
Если бы вам нужно было запросить несколько таблиц, у вас были бы вложенные контексты, и это было бы некрасиво.
У вас начнут возникать такие вещи, как
using(CompanyContext comp = new CompanyContext)
{
using (CountryContext country = new CountryContext)
{
}
}
Я не могу представить, что таким образом можно было бы повысить производительность, но я уверен, что обслуживание было бы затруднительным.