2013-07-26 101 views
3

我有一個與我的域 - 「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;} 
} 

一類。如果現在我運行一個數據庫 - 表「人」是不是create.It創建一個表「實體」有場標識,名字,姓氏。

如果我修改Person

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

然後在數據庫中的兩個表創建 - '人' 和 '實體'。我如何使用繼承?我該如何做對?

+0

我知道這個線程是很老了!但是你是否遇到了這個問題? **自動更新數據庫?** – Flo

回答

4

嘗試使用[Table("Person")]屬性,我鼓勵你看看那個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;} 
} 
+0

這是工作。真的非常感謝你。 – FetFrumos