using System;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Dpz.Core.Infrastructure;
using Dpz.Core.Infrastructure.Entity;
using MongoDB.Driver.Linq;
namespace Dpz.Core.MongodbAccess;
public interface IUnitOfWork : IDisposable
{
/// <summary>
/// 开始工作单元
/// </summary>
/// <returns></returns>
void Begin();
/// <summary>
/// 获取指定的仓储库
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
IRepository<T> GetRepository<T>() where T : IBaseEntity, new();
/// <summary>
/// 获取指定集合名称的仓储库
/// </summary>
/// <param name="collectionName">集合名称</param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
IRepository<T> GetRepository<T>(string collectionName) where T : IBaseEntity, new();
/// <summary>
/// 异步。保存对数据库的所有更改
/// </summary>
/// <returns></returns>
Task CommitAsync();
/// <summary>
/// 异步。回滚事务
/// </summary>
/// <returns></returns>
Task RollbackAsync();
}