using System.Linq.Expressions; using NHibernate; using NHibernate.Linq; namespace Tiger.Storage; public class Repository : IRepository where T : class { private readonly ISession _session; public Repository(ISession session) { _session = session; } public async Task FindAsync(object id) { return await _session.GetAsync(id); } public async Task SaveAsync(T entity) { await _session.SaveOrUpdateAsync(entity); await _session.FlushAsync(); } public async Task SaveManyAsync(params T[] entities) { foreach (var entity in entities) { await _session.SaveOrUpdateAsync(entity); } await _session.FlushAsync(); } public async Task SaveManyAsync(IEnumerable entities) { foreach (var entity in entities) { await _session.SaveOrUpdateAsync(entity); } await _session.FlushAsync(); } public async Task> FindByAsync(Expression>? expression) { var query = _session.Query(); if (expression != null) { query = query.Where(expression); } return await query.ToListAsync(); } public async Task FindOneByAsync(Expression> expression) { return await _session.Query().FirstOrDefaultAsync(expression); } }