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

问题描述 投票:0回答:1

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

我通过将模型移动到单独的数据项目来尝试遵循Clean Architecture来调整我的设备。

通常,当我拥有同一项目中的所有模型和数据库上下文时,实体框架在上下文中生成映射,以反映我如何定义模型(使用公共虚拟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代码是否存在问题或潜在问题?任何人都知道这是如何工作的,如果它似乎不需要这个代码来建立数据库关系?

asp.net entity-framework asp.net-mvc-4 ef-fluent-api ef-model-builder
1个回答
0
投票

按照惯例,数据库映射可使用基于属性的配置或Fluent API进行自定义。见Code-First Conventions

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

© www.soinside.com 2019 - 2024. All rights reserved.