Не удалось найти код, созданный сопоставлением построителя модели Fluent API в контексте базы данных - PullRequest
0 голосов
/ 10 марта 2019

Я работаю с 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 проблемой или потенциальной проблемой? Кто-нибудь знает, как это работает, если, по-видимому, ему не нужен этот код для установления связей с базой данных?

1 Ответ

0 голосов
/ 10 марта 2019

Отображение базы данных по договоренности настраивается с помощью конфигурации на основе атрибутов или Fluent API. См. Условные обозначения кодов

Таким образом, даже без какой-либо явной настройки EF может генерировать базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...