我有一个数据库,包含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);
}