[英]Return DbSet of BaseEntity in Entity Framework
是否可以使用每個具體類型繼承或其他繼承類型的表返回DbSet<BaseEntity>
形成實體框架中的方法?
從Person
繼承的Teacher
和Student
。
DbSet<Teacher> Teachers;
DbSet<Student> Students;
DbSet<Person> GetGenericDbSet(int entityType)
{
if (entityType == 0)
{
return Teachers;
}
else
{
return Students;
}
}
編譯錯誤:
不能將類型
DbSet<Teacher>
隱式轉換為DbSet<Person>
即使Teacher : Person
和Student : Person
也不能返回DbSet<Teacher>
作為DbSet<Person>
因為IDbSet<T>
不是協變的(看起來即使基接口IQueryable
是協變的,它的子接口不保留該財產)。
另一種解決方案是將方法的返回類型更改為IQueryable<Person>
(因為IQueryable<T>
是協變的,它將接受具有T
子類的對象):
IQueryable<Person> GetPerson(int type)
{
if (type == 0)
{
return Teachers.Cast<Person>();
}
else
{
return Students.Cast<Person>();
}
}
但是這樣做,您將失去所有實體框架緩存功能( Attach
、 Find
等)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.