我有一个包含我的域类的程序集 - “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'。如何使用继承?我怎样做才正确?
尝试使用[Table("Person")]
属性,我鼓励你看一下使用 EF Code First 进行继承 http://weblogs.asp.net/manavi/archive/2010/12/28/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-2-table-per-type-tpt.aspx,这是一个好帖子。
所以要恢复试试这个:
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;}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)