1
我有一個簡單的TPT繼承,EF 6.1.1EntityFramewok TPT繼承
public class Base {
public int Id {get; set;}
}
public class Derived : Base {
public int SomeProperty {get; set;}
}
注意,在我的情況Base
不是一個抽象類,因爲在我的領域可以存在的Base
的實例,不需要Derived
。 的DbContext:
public class ApplicationDbContext : DbContext {
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Derived >().ToTable("Derived");
}
public DbSet<Base> BaseDbSet {get ; set; }
public DbSet<Derived> DerivedDbSet {get ; set; }
}
現在,
- 我可以BaseDbSet插入。
- 我可以從BaseDbSet中刪除。
- 從DerivedDbSet刪除只刪除派生實體。
- 在DerivedDbSet插入插入也插入一個新的記錄在基表,也是如果Id是正確的,創建一個新的Id。
我真的不明白第4點。如何在派生表中插入一條記錄而不在基表中插入新記錄? 我認爲問題與身份列有關。看起來插入EF時不關心Derived類的Id,因爲Id屬性有HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
,但我不能在Base和Derived類中指定不同的DatabaseGeneratedOption屬性。
是的,我是triyng從現有的'基地'創建一個'派生',你發佈的鏈接解釋說,EF不支持。我認爲這是一個強大的限制,使TPT繼承不那麼有用。在我看來,創建存儲過程來插入派生自Base的東西是瘋狂的。 – Marco 2014-09-26 13:03:46
同意你Marco – jlvaquero 2014-09-28 22:35:09