在ASP.NET Core中,仓储和工作单元模式是一种常见的设计模式,用于管理和操作数据源。下面是一个包含代码示例的解决方法:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
public interface IRepository
{
Task GetById(int id);
Task> GetAll();
Task Add(T entity);
Task Update(T entity);
Task Delete(int id);
}
public class Repository : IRepository where T : class
{
private readonly DbContext _dbContext;
private readonly DbSet _dbSet;
public Repository(DbContext dbContext)
{
_dbContext = dbContext;
_dbSet = _dbContext.Set();
}
public async Task GetById(int id)
{
return await _dbSet.FindAsync(id);
}
public async Task> GetAll()
{
return await _dbSet.ToListAsync();
}
public async Task Add(T entity)
{
await _dbSet.AddAsync(entity);
await _dbContext.SaveChangesAsync();
}
public async Task Update(T entity)
{
_dbSet.Update(entity);
await _dbContext.SaveChangesAsync();
}
public async Task Delete(int id)
{
var entity = await _dbSet.FindAsync(id);
_dbSet.Remove(entity);
await _dbContext.SaveChangesAsync();
}
}
public interface IUnitOfWork
{
Task Commit();
void Rollback();
}
public class UnitOfWork : IUnitOfWork
{
private readonly DbContext _dbContext;
public UnitOfWork(DbContext dbContext)
{
_dbContext = dbContext;
}
public async Task Commit()
{
await _dbContext.SaveChangesAsync();
}
public void Rollback()
{
// 回滚操作
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
services.AddScoped();
// 注册其他服务
// ...
}
现在,您可以在ASP.NET Core控制器或其他服务中使用仓储和工作单元模式来发布实体。例如:
public class ProductService
{
private readonly IRepository _productRepository;
private readonly IUnitOfWork _unitOfWork;
public ProductService(IRepository productRepository, IUnitOfWork unitOfWork)
{
_productRepository = productRepository;
_unitOfWork = unitOfWork;
}
public async Task CreateProduct(Product product)
{
await _productRepository.Add(product);
await _unitOfWork.Commit();
}
public async Task UpdateProduct(Product product)
{
await _productRepository.Update(product);
await _unitOfWork.Commit();
}
public async Task DeleteProduct(int productId)
{
await _productRepository.Delete(productId);
await _unitOfWork.Commit();
}
}
这样,您就可以在ASP.NET Core应用程序中使用仓储和工作单元模式来发布实体。