EF Code First表命名问题

时间:2012-10-17 16:37:36

标签: c# entity-framework

我首先使用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
}

我认为表名基于上下文中属性的名称,因为它为所有StatusTypes对象生成了一个名为Status的表。但是,如果我将Applications属性重命名为MyApplications,它仍然会生成一个名为Applications的表。很明显,这不仅仅是物业的名称而且我遗漏了一些东西。

我的问题:如何让EF以不同的方式命名此表?

3 个答案:

答案 0 :(得分:1)

你不能使用配置类做这样的事情:

public class ApplicationConfiguration : EntityTypeConfiguration<Application>
{
    public ClientConfiguration()
    {
        ToTable("SpecialApplication");
    }
}

然后在你的上下文中覆盖OnModelCreating:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new ApplicationConfiguration());
    }

然后应该强制将您的表命名为SpecialApplication并避免冲突

答案 1 :(得分:0)

默认情况下,Entity框架代码在从模型类构建db时首先会为表生成多个名称。您可以覆盖db上下文类的OnModelCreating方法,为表指定不同的名称。

public class YourDBCOntext:DbContext
{
  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    modelBuilder.Entity<Applications>().ToTable("MYApplications");
  }    
}

您也可以全局执行此操作,以便所有表都不会有多个名称。

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
     modelBuilder.Conventions.Remove<PluralizingTaleNameConvention>();
  }    
}

答案 2 :(得分:0)

我刚刚重命名了这个课程,但它确实奏效了。现在最简单的解决方案。