C# EF代码第一个表命名问题

C# EF代码第一个表命名问题,c#,entity-framework,C#,Entity Framework,我有一个项目首先使用EF代码构建。它还使用表单身份验证。直到最近,成员数据库和应用程序数据库都是单独开发的,但为了简单起见,我想将它们合并到一个数据库中 我的代码优先模型中的一个类称为“Application”,因此EF生成的表称为“Applications”,它与同名的成员表冲突。这是我当前上下文的一个示例: public partial class ExampleContext : DbContext { public DbSet<Application> Applica

我有一个项目首先使用EF代码构建。它还使用表单身份验证。直到最近,成员数据库和应用程序数据库都是单独开发的,但为了简单起见,我想将它们合并到一个数据库中

我的代码优先模型中的一个类称为“Application”,因此EF生成的表称为“Applications”,它与同名的成员表冲突。这是我当前上下文的一个示例:

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>();
  }    
}