天天看点

net core mysql开源框架_.NET Core 2.0+Mysql+AceAdmin 搭建快速开发框架

public class Repository : IRepository where T : BaseEntity

{

DbContext _dbContext;

public Repository(DbContext dbContext)

{

_dbContext = dbContext;

}

public int SaveChanges()

{

return _dbContext.SaveChanges();

}

public async Task SaveChangesAsync()

{

return await _dbContext.SaveChangesAsync();

}

public void Disposed()

{

throw new Exception("不允许在这里释放上下文,请在UnitOfWork中操作");

_dbContext.Dispose();

}

#region 插入数据

public bool Insert(T entity, bool isSaveChange = true)

{

_dbContext.Set().Add(entity);

if (isSaveChange)

{

return SaveChanges() > 0;

}

return false;

}

public async Task InsertAsync(T entity, bool isSaveChange = true)

{

_dbContext.Set().Add(entity);

if (isSaveChange)

{

return await SaveChangesAsync() > 0;

}

return false;

}

public bool Insert(List entitys, bool isSaveChange = true)

{

_dbContext.Set().AddRange(entitys);

if (isSaveChange)

{

return SaveChanges() > 0;

}

return false;

}

public async Task InsertAsync(List entitys, bool isSaveChange = true)

{

_dbContext.Set().AddRange(entitys);

if (isSaveChange)

{

return await SaveChangesAsync() > 0;

}

return false;

}

#endregion

#region 更新数据

public bool Update(T entity, bool isSaveChange = true, List updatePropertyList = null)

{

if (entity==null)

{

return false;

}

_dbContext.Set().Attach(entity);

if (updatePropertyList==null)

{

_dbContext.Entry(entity).State = EntityState.Modified;//全字段更新

}

else

{

updatePropertyList.ForEach(c => {

_dbContext.Entry(entity).Property(c).IsModified = true; //部分字段更新的写法

});

}

if (isSaveChange)

{

return SaveChanges() > 0;

}

return false;

}

public bool Update(List entitys, bool isSaveChange = true)

{

if (entitys==null||entitys.Count==0)

{

return false;

}

entitys.ForEach(c => {

Update(c, false);

});

if (isSaveChange)

{

return SaveChanges() > 0;

}

return false;

}

public async Task UpdateAsync(T entity, bool isSaveChange = true, List updatePropertyList = null)

{

if (entity == null)

{

return false;

}

_dbContext.Set().Attach(entity);

if (updatePropertyList == null)

{

_dbContext.Entry(entity).State = EntityState.Modified;//全字段更新

}

else

{

updatePropertyList.ForEach(c => {

_dbContext.Entry(entity).Property(c).IsModified = true; //部分字段更新的写法

});

}

if (isSaveChange)

{

return await SaveChangesAsync() > 0;

}

return false;

}

public async Task UpdateAsync(List entitys, bool isSaveChange = true)

{

if (entitys == null || entitys.Count == 0)

{

return false;

}

entitys.ForEach(c => {

_dbContext.Set().Attach(c);

_dbContext.Entry(c).State = EntityState.Modified;

});

if (isSaveChange)

{

return await SaveChangesAsync() > 0;

}

return false;

}

#endregion

#region 删除

public bool Delete(T entity, bool isSaveChange = true)

{

_dbContext.Set().Attach(entity);

_dbContext.Set().Remove(entity);

return isSaveChange ? SaveChanges() > 0 : false;

}

public bool Delete(List entitys, bool isSaveChange = true)

{

entitys.ForEach(entity =>

{

_dbContext.Set().Attach(entity);

_dbContext.Set().Remove(entity);

});

return isSaveChange ? SaveChanges() > 0 : false;

}

public virtual async Task DeleteAsync(T entity, bool isSaveChange = true)

{

_dbContext.Set().Attach(entity);

_dbContext.Set().Remove(entity);

return isSaveChange ? await SaveChangesAsync() > 0 : false;

}

public virtual async Task DeleteAsync(List entitys, bool isSaveChange = true)

{

entitys.ForEach(entity =>

{

_dbContext.Set().Attach(entity);

_dbContext.Set().Remove(entity);

});

return isSaveChange ? await SaveChangesAsync() > 0 : false;

}

#endregion

public IQueryable Entities => _dbContext.Set().AsQueryable().AsNoTracking();

//public async Task> EntitiesAsync => Task.Run(()=> _dbContext.Set().AsQueryable().AsNoTracking());

public DatabaseFacade Database => _dbContext.Database;

#region 查找

public T Get(object id)

{

return _dbContext.Set().Find(id);

}

public T Get(Expression> predicate = null)

{

return _dbContext.Set().Where(predicate).AsNoTracking().FirstOrDefault();

}

public async Task GetAsync(object id)

{

return await _dbContext.Set().FindAsync(id);

}

public async Task GetAsync(Expression> predicate = null)

{

return await _dbContext.Set().Where(predicate).AsNoTracking().FirstOrDefaultAsync();

}

public async Task> GetListAsync(Expression> predicate = null)

{

return await _dbContext.Set().Where(predicate).AsNoTracking().ToListAsync();

}

public async Task> LoadAsync(Expression> predicate = null)

{

if (predicate == null)

{

predicate = c => true;

}

return await Task.Run(() => _dbContext.Set().Where(predicate).AsNoTracking());

}

public void Dispose()

{

throw new NotImplementedException();

}

#endregion

}