using FreeSql.Extensions.EntityUtil; using System; using System.Collections.Generic; using System.Linq; namespace FreeSql { internal class RepositoryDbSet : DbSet where TEntity : class { protected BaseRepository _repo; public RepositoryDbSet(BaseRepository repo) { _db = repo._db; _uow = repo.UnitOfWork; _repo = repo; } IUnitOfWork _uowPriv; internal override IUnitOfWork _uow { get => _uowPriv; set { _uowPriv = value; foreach (var dbset in _dicDbSetObjects.Values) //配合 UnitOfWorkManager dbset._uow = _uowPriv; } } protected override ISelect OrmSelect(object dywhere) { var select = base.OrmSelect(dywhere); if (_repo._asTablePriv != null) select.AsTable(_repo._asTablePriv); return select; } internal ISelect OrmSelectInternal(object dywhere) => OrmSelect(dywhere); protected override IUpdate OrmUpdate(IEnumerable entitys) { var update = base.OrmUpdate(entitys); if (_repo._asTablePriv != null) update.AsTable(old => _repo._asTablePriv(_entityType, old)); return update; } internal IUpdate OrmUpdateInternal(IEnumerable entitys) => OrmUpdate(entitys); protected override IDelete OrmDelete(object dywhere) { var delete = base.OrmDelete(dywhere); if (_repo._asTablePriv != null) delete.AsTable(old => _repo._asTablePriv(_entityType, old)); return delete; } internal IDelete OrmDeleteInternal(object dywhere) => OrmDelete(dywhere); protected override IDelete OrmDeleteAsType(Type entityType) { var delete = base.OrmDeleteAsType(entityType); if (_repo._asTablePriv != null) delete.AsTable(old => _repo._asTablePriv(_entityType, old)); return delete; } protected override IInsert OrmInsert(TEntity entity) => OrmInsert(new[] { entity }); protected override IInsert OrmInsert(IEnumerable entitys) { var insert = base.OrmInsert(entitys); if (_repo._asTablePriv != null) insert.AsTable(old => _repo._asTablePriv(_entityType, old)); return insert; } internal IInsert OrmInsertInternal(TEntity entity) => OrmInsert(entity); internal IInsert OrmInsertInternal(IEnumerable entitys) => OrmInsert(entitys); } }