using DW5S.Entity; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DW5S.Repostory { public interface IUnitOfWork : IAsyncDisposable { IRepository Of() where TEntity : BaseEntity; IRepository OfLong() where TEntity : BaseEntity; IRepository OfType() where TEntity : BaseEntity; /// /// 保存 /// /// 变化的模型,用于清空模型对应的缓存 /// Task SaveAsync(params Type[] changedEntityTypes); } public class UnitOfWork : IUnitOfWork { public readonly OracleContext ctx; public IRepository OfType() where TEntity : BaseEntity { //UnitOfWork中的DbContext必须和Repository中的DbContext是同一个对象 var reps = IocContainer.GetService>(ctx); return reps; } public IRepository Of() where TEntity : BaseEntity { //UnitOfWork中的DbContext必须和Repository中的DbContext是同一个对象 var reps = IocContainer.GetService>(ctx); return reps; } public IRepository OfLong() where TEntity : BaseEntity { //UnitOfWork中的DbContext必须和Repository中的DbContext是同一个对象 var reps = IocContainer.GetService>(ctx); return reps; } public UnitOfWork(OracleContext ctx) { this.ctx = ctx; } public async Task SaveAsync(params Type[] changedEntityTypes) { if (changedEntityTypes != null) { if (changedEntityTypes.Contains(typeof(XlInfo))) { IocContainer.Cache.Remove(CacheKeys.AllXlSat); } else if (changedEntityTypes.Contains(typeof(SatInfo))) { IocContainer.Cache.Remove(CacheKeys.AllSat); } } return await ctx.SaveChangesAsync(); } public async ValueTask DisposeAsync() { await ctx.DisposeAsync(); } } }