无法在数据库上下文中找到 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 也可以生成数据库。
我正在使用 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 也可以生成数据库。