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[] { });
       }

   }
}

次に、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' は作成されません。フィールド Id、FirstName、LastName を持つテーブル 'Entities' が作成されます。

人を変えたら

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

次に、データベースに「Person」と「Entities」の 2 つのテーブルを作成しました。継承を使用するにはどうすればよいですか? どうすれば正しくできますか?

4

1 に答える 1

7

属性を使用してみてください。そのInheritance with EF Code First[Table("Person")]をご覧になることをお勧めします。これは良い投稿です。

再開するには、これを試してください:

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 に答える