0

我正在使用带有实体框架 6 的 ASP.NET MVC 5。

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

通常,当我在同一个项目中拥有所有模型及其数据库上下文时,实体框架会在上下文中生成映射以反映我定义模型的方式所指示的关系(使用公共虚拟 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 的情况下如何正确生成表及其关系。我在项目中搜索了模型构建器代码,但在任何地方都找不到。

缺少此 Fluent API 代码是问题还是潜在问题?如果看起来不需要此代码来建立数据库关系,任何人都知道这是如何工作的?

4

1 回答 1

0

按照惯例,数据库映射可以使用基于属性的配置或 Fluent API 进行自定义。请参阅代码优先约定

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

于 2019-03-10T17:47:26.893 回答