Fet*_*mos 4 c# entity-framework model dynamic code-first
我有一个带有我域的类的程序集-“ 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[] { });
}
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,我创建数据库
context.Database.Create();
Run Code Online (Sandbox Code Playgroud)
这可行,但是我的域存在问题。我有一个上级实体类
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;}
}
Run Code Online (Sandbox Code Playgroud)
如果现在我运行一个数据库-表'Person'未创建,它将创建一个表'Entities',其字段为Id,FirstName,LastName。
如果我改变人
public class Person
{
public int Id {get; set;}
public string FirstName {get ;set;}
public string LastName {get ;set;}
}
Run Code Online (Sandbox Code Playgroud)
然后在数据库中创建两个表-“人员”和“实体”。如何使用继承?我该怎么办?
尝试使用[Table("Person")]Attribute,我鼓励您使用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;}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7015 次 |
| 最近记录: |