Я работаю с ASP.NET MVC 5 с Entity Framework 6.
Я скорректировал свою ахитетуру, переместив мои модели в отдельный проект данных в попытке следовать Чистой архитектуре.
Обычно, когда у меня есть все модели в одном проекте и контекст базы данных с ним, структура сущностей генерирует отображения в контексте, чтобы отразить отношения, которые были обозначены тем, как я определил модели (используя общедоступную виртуальную коллекцию ICollection ... и т. Д. ).
Пример кода из контекста базы данных, когда все модели находятся в одном проекте, показан ниже:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
//many to many Company-Services
modelBuilder.Entity<Company>()
.HasMany(s => s.Services)
.WithMany(c => c.Company)
.Map(cs =>
{
cs.MapLeftKey("CompanyRefId");
cs.MapRightKey("ServiceRefId");
cs.ToTable("CompanyServices");
});
//Staff-Qualifications
modelBuilder.Entity<Staff>()
.HasMany(q => q.Qualifications)
.WithMany(s => s.Staff)
.Map(cs =>
{
cs.MapLeftKey("StaffRefId");
cs.MapRightKey("QualificationRefId");
cs.ToTable("StaffQualifications");
});
}
Однако теперь, когда у меня есть модели в отдельном проекте данных в одном решении, в контексте базы данных больше нет этого кода. Он просто имеет этот простой код Fluent API, который я включил ниже.
Код в контексте, когда модели находятся в отдельном проекте в одном решении:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
После проверки в студии управления сервером таблицы генерируются в базе данных так же, как если бы там был код разработчика модели.
Я обнаружил, что это вызывает тревогу, и мне было интересно, как таблицы и их связи по-прежнему генерировались правильно без использования Fluent API. Я искал проект для кода конструктора моделей, но нигде не смог его найти.
Является ли отсутствие этого кода API Fluent проблемой или потенциальной проблемой?
Кто-нибудь знает, как это работает, если, по-видимому, ему не нужен этот код для установления связей с базой данных?