entity framework(代码优先) – 动态构建模型
我有一个类我的域的组件 – “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[] { }); } } }
接下来,我创建DataBase
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’不是create.It创建一个表’Entities’,其中包含字段Id,FirstName,LastName。
如果我改变了人
public class Person { public int Id {get; set;} public string FirstName {get ;set;} public string LastName {get ;set;} }
然后在数据库中创建了两个表 – “人物”和“实体”。 我如何使用inheritance? 我该怎么做?
尝试使用[Table("Person")]
属性,我建议您先看一下使用EF Code First的inheritance ,这是一个很好的post。
所以要恢复试试这个:
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;} }