C# EF代码第一个表命名问题
我有一个项目首先使用EF代码构建。它还使用表单身份验证。直到最近,成员数据库和应用程序数据库都是单独开发的,但为了简单起见,我想将它们合并到一个数据库中 我的代码优先模型中的一个类称为“Application”,因此EF生成的表称为“Applications”,它与同名的成员表冲突。这是我当前上下文的一个示例:C# EF代码第一个表命名问题,c#,entity-framework,C#,Entity Framework,我有一个项目首先使用EF代码构建。它还使用表单身份验证。直到最近,成员数据库和应用程序数据库都是单独开发的,但为了简单起见,我想将它们合并到一个数据库中 我的代码优先模型中的一个类称为“Application”,因此EF生成的表称为“Applications”,它与同名的成员表冲突。这是我当前上下文的一个示例: public partial class ExampleContext : DbContext { public DbSet<Application> Applica
public partial class ExampleContext : DbContext
{
public DbSet<Application> Applications { get; set; }
public DbSet<Status> StatusTypes { get; set; } // notice the name of the property vs the name of the class
}
public分部类ExampleContext:DbContext
{
公共数据库集应用程序{get;set;}
public DbSet StatusTypes{get;set;}//注意属性的名称与类的名称
}
我认为表名基于上下文中属性的名称,因为它为所有Status
对象生成了一个名为StatusTypes
的表。但是,如果我将Applications
属性重命名为类似MyApplications
的内容,它仍然会生成一个名为Applications
的表。所以很明显,这不仅仅是财产的名称,我遗漏了一些东西
我的问题:如何让EF以不同的方式命名此表?您能否使用configuration类执行以下操作:
public class ApplicationConfiguration : EntityTypeConfiguration<Application>
{
public ClientConfiguration()
{
ToTable("SpecialApplication");
}
}
这将强制将表命名为SpecialApplication并避免冲突。默认情况下,Entity framework code first将在从模型类构建db时为表生成复数名称。您可以重写db上下文类的
OnModelCreating
方法,并为表指定其他名称
public class YourDBCOntext:DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Applications>().ToTable("MYApplications");
}
}
public类YourDBCOntext:DbContext
{
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable(“MYApplications”);
}
}
您还可以全局执行此操作,以便所有表都不会具有复数名称
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTaleNameConvention>();
}
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
}
}
我刚刚重命名了这个类,它工作了。目前最简单的解决方案。您使用的是网站项目还是Web应用程序项目?网站项目通常会遇到这类问题,因为它们不使用名称空间来区分命名范围。应用程序的前端是MVC项目。但所有实体框架和其他数据库操作都在单独的类库中。为什么作为一个web应用程序会导致EF使用不同的名称?这对我来说没有意义。名称空间。。不是名字。命名空间提供一个名称有效的“范围”。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTaleNameConvention>();
}
}