簡體   English   中英

創建通用 DbSet.Find() 查詢

[英]Creating a Generic DbSet.Find() query

我有一個包含 3 個表的數據庫,這些表都實現了我的 IMeetingEntityEntityBaseClass.cs

public class BookingAppDbContext : DbContext
    {
        public BookingAppDbContext(DbContextOptions<BookingAppDbContext> options) : base(options)
        {

        }
        
        public DbSet<MeetingSpace> MeetingSpaces { get; set; } 
        public DbSet<Employee> Employees { get; set; } 
        public DbSet<Booking> Bookings { get; set; } 
    }

我開始只使用 MeetingSpaces 表,並試圖使我的數據庫操作方法通用,以便它們可以重用於其他兩個表。 但是,它們(和我的 ASP.NET 頁面)依賴 Id 來標識會議空間。 我的問題是我無法弄清楚如何使 GetById 類通用。 對於 MeetingSpace 表查詢,如下所示:

public MeetingSpace GetById(int id)
        {
            return db.MeetingSpaces.Find(id);
        }

我嘗試使用具有指定類型的 Find 重載,但 typeof(T) 返回“object”,引發了“object”類型無法轉換為“T”類型的錯誤。

public T GetById<T>(int id) where T : IMeetingEntityBaseClass
        {
            return db.Find(typeof(T), id);
        }

您需要使用DbContext.Set方法。 此外,您需要添加一個類型約束,因為Set方法依賴於它(所有 EF 實體也是如此)。例如:

public T GetById<T>(int id) 
    where T : IMeetingEntityBaseClass, class
{
    return db.Set<T>().Find(id);
}

暫無
暫無

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

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