0

私のドメインのクラスがあります(アセンブリ「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[] { });
   }

   }
 }

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;}
} 

新しいデータベースを作成したら、新しい Person を追加します。フィールド ID に null を挿入できないエラー。自動インクリメントは機能しません。動的エンティティを追加しない場合、空のデータベースが作成され、コードは機能します。

public class PersonContext: DbContext
{
 public PersonContext() : base("DBConnection"){}

 public IDbSet<Person> Persons { get; set; }
}

using (PersonContext context = new PersonContext())
    {
        Person user = new Person
        {
            FirstName = "first",
            LastName = "last"
        };
        context.Persons.Add(user);
        context.SaveChanges();
    }

何が問題なのですか?自動インクリメントが機能しないのはどのくらいですか?

4

0 に答える 0