2016-02-04 46 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