0

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

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

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 以不同的方式命名此表?

4

3 回答 3

1

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

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

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

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

这应该会强制你的表被命名为 SpecialApplication 并避免冲突

于 2012-10-17T17:24:53.450 回答
0

默认情况下,实体框架代码在从模型类构建数据库时首先会为表生成复数名称。您可以覆盖OnModelCreatingdb 上下文类的方法,为表指定不同的名称。

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>();
  }    
}
于 2012-10-17T17:29:02.853 回答
0

我刚刚重命名了这个类,它起作用了。目前最简单的解决方案。

于 2012-10-17T19:06:46.937 回答