4

我有一个包含我的域的类的程序集 - “Domains.dll”。我动态地将程序集的加载类添加到我的 DbContext Dbset 中。

public class MyContext : DbContext
{
   public MyContext() : base("DBConnection"){}

   protected override void OnModelCreating(DbModelBuilder modelBuilder)
   {
       Assembly assembly = Assembly.LoadFrom("Domains.dll");
       var entityMethod = typeof(DbModelBuilder).GetMethod("Entity");
       var list = assembly.GetTypes().OrderBy(i => i.GetType().Name);
       foreach (Type item in list)
       {
           entityMethod.MakeGenericMethod(item)
     .Invoke(modelBuilder, new object[] { });
       }

   }
}

接下来,我创建数据库

context.Database.Create();

这可行,但我的域有问题。我有一个父实体的类

public abstract class Entity
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
}

public class Person : Entity
{
   public string FirstName {get ;set;}
   public string LastName {get ;set;}
} 

如果现在我运行一个数据库 - 未创建表“Person”。它创建一个包含字段 Id、FirstName、LastName 的表“Entities”。

如果我改变人

public class Person 
{
   public int Id {get; set;}
   public string FirstName {get ;set;}
   public string LastName {get ;set;}
} 

然后在数据库中创建两个表 - 'Person' 和 'Entities'。如何使用继承?我该怎么做?

4

1 回答 1

7

尝试使用[Table("Person")]Attribute,我鼓励您看一下Inheritance with EF Code First,这是一篇好文章。

所以要恢复试试这个:

public abstract class Entity
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
}
[Table("Person")]
public class Person : Entity
{
   public string FirstName {get ;set;}
   public string LastName {get ;set;}
} 
于 2013-07-26T10:49:47.583 回答