我正在使用代码优先方法,并且我正在尝试更改 EF 创建表的行为。我有两个简单的类:
注意:我每次都会删除并重新创建我的数据库。这在现实世界中不会发生,但为了测试,我试图拦截创建并强制 EF 按照我的设想创建数据库。
public class Person
{
public int PersonId { get; private set; }
public string Forename { get; set; }
}
public class Officer : Person
{
public int OfficerId { get; private set; }
public bool IsManager { get; set; }
}
在我的 OnModelCreating() 事件中,我有以下内容:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<Person>().HasKey(x => x.PersonId);
modelBuilder.Entity<Person>().ToTable("Person");
modelBuilder.Entity<Officer>().HasKey<int>(x => x.OfficerId);
modelBuilder.Entity<Officer>().ToTable("Officer");
}
问题是创建我的数据库时,它会将表创建为:
表:Person PersonId INT PK Forename nvarchar(50)
表:Officer PersonId INT PK,FK IsManager BIT OfficeId INT
对我来说,这看起来是错误的,因为它不符合传统的命名约定,即 TableNameId。
非常感谢您对此的任何帮助。在此先感谢,奥南。