创建泛型DbSet.Find()查询



我有一个数据库,包含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 : class, IMeetingEntityBaseClass
{
return db.Set<T>().Find(id);
}

最新更新