我首先使用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以不同的方式命名此表?
答案 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)
我刚刚重命名了这个课程,但它确实奏效了。现在最简单的解决方案。