我想为EF Core 6创建一个存储库样式模式。我知道大多数人都说我不需要这样做,但我希望有这样的函数。
例如,它使代码看起来更整洁。
GetALL();
GetSingleRecord(1);
Update(record);
我在EF Core 6中尝试了这样的东西:
public static class ConciergeExtensions
{
public static IQueryable<Rooms> GetAllRooms(this DbSet<Rooms> rooms)
{
return rooms;
}
public static Rooms GetSingleRoom(this DbSet<Rooms> rooms, int Id)
{
return rooms.Where(w => w.Id == Id).FirstOrDefault();
}
}
但是当我去访问我的方法时,它找不到:
public Rooms GetSingleRoom() => db.Rooms.GetSingleRoom()
由于没有将参数id
或roomId
传递给在where
条件下查询的扩展方法,
public Rooms GetSingleRoom(int roomId) => db.Rooms.GetSingleRoom(roomId)
这是我已经工作的例子扩展方法。
public static IQueryable<TEntity> ApplyFilter<TEntity>(this IQueryable<TEntity> query, Expression<Func<TEntity, bool>> filter) where TEntity : class
{
return query.AsQueryable().Where(filter);
}
...
// SomeService.cs
using DAL.EntityExtensions; // --> Implementation here
public User Get(Expression<Func<Admin, bool>> filter = null)
{
return _context.User.ApplyFilter(filter).FirstOrDefault();
}
试试这个,希望能有所帮助