无法在数据库上下文中找到 Fluent API 模型构建器映射生成的代码

Unable to find the code generated by Fluent API model builder mapping in the Database Context

我正在使用 ASP.NET MVC 5 和 Entity Framework 6.

我通过将我的模型移动到一个单独的数据项目来调整我的架构,以尝试遵循清洁架构。

通常当我在同一个项目和数据库上下文中拥有所有模型时,entity framework 在上下文中生成映射以反映我定义模型的方式所指示的关系(使用 public 虚拟 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");
         });
    }

但是现在我在同一解决方案的单独数据项目中拥有模型,数据库上下文不再有此代码的 none。它只有我在下面包含的这个简单的 Fluent API 代码。

模型在同一解决方案中的单独项目中时上下文中的代码:

            protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }

在 Server Management Studio 中检查后,表的生成方式与数据库中的生成方式相同,就好像模型构建器代码就在那里一样。

我发现这令人担忧,并且想知道在没有 Fluent API 的情况下如何仍然正确生成表格及其关系。我在项目中搜索了模型构建器代码,但在任何地方都找不到。

缺少此 Fluent API 代码是问题还是潜在问题? 如果它似乎不需要这段代码来建立数据库关系,有人知道它是如何工作的吗?

数据库映射是约定俗成的,可以使用基于属性的配置或 Fluent API 进行自定义。参见 Code-First Conventions

因此,即使没有任何显式配置,EF 也可以生成数据库。