2016-02-04 36 views
1

比方說,我有以下實體:(?爲什麼)其中DbSet加時TPT使用繼承

public class Person { ... } 
public class Student : Person { ... } 
public class Teacher : Person { ... } 

在上下文類,下面的是更好的

  • 創建只有DbSet<Person> Persons { get; set; }和檢索使用context.Persons.OfType<Student>(),或
  • 學生創造3個DbSet S(DbSet<Person>DbSet<Student>DbSet<Teacher>),或
  • 創建2個DbSet S,只爲孩子類型(DbSet<Student>DbSet<Teacher>

謝謝!

+0

做的學生和教師已經在其定義的屬性? –

+0

當然,我忽略了這一點,但所有的課程都是全口味的課程。 – Shimrod

+0

品味或意見的問題。 –

回答

0

僅創建DbSet<Person> Persons { get; set; }和裝飾繼承類如下

[Table("Students")] 
public class Student : Person { ... } 
[Table("Teachers")] 
public class Teacher : Person { ... } 

參考:http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-2-table-per-type-tpt

+0

謝謝,但這不是我所期望的。我能夠進行映射(我使用流暢的API而不是DataAnnotations),並且一切正常,我可以使用我的實體。我的qurestion更多的是在上下文中暴露DBSets時的最佳實踐。 – Shimrod

+0

這就是我的答案所暗示的:第一種方法是寫一個。只有一個DbSet。 – Korayem