簡體   English   中英

在實體框架中返回 BaseEntity 的 DbSet

[英]Return DbSet of BaseEntity in Entity Framework

是否可以使用每個具體類型繼承或其他繼承類型的表返回DbSet<BaseEntity>形成實體框架中的方法?

Person繼承的TeacherStudent

DbSet<Teacher> Teachers;
DbSet<Student> Students;

DbSet<Person> GetGenericDbSet(int entityType)
{
    if (entityType == 0)
    {
        return Teachers;
    }
    else
    {
        return Students;
    }
}

編譯錯誤:

不能將類型DbSet<Teacher>隱式轉換為DbSet<Person>

即使Teacher : PersonStudent : 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>();
    }
}

但是這樣做,您將失去所有實體框架緩存功能( AttachFind等)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM