ASP.NET Core 2.2 WebApi 시리즈[7] 일반 창고 모델과 작업 단위
실제 개발 과정에서 우리는 여러 장의 표 데이터를 동시에 조작하는 것을 자주 볼 수 있다. 그러면 이전의 문법에 따라 데이터베이스에 여러 번의 조작을 제출했고 여러 개의 사무를 열었기 때문에 데이터의 일치성을 보장할 수 없다. 작업 단원(Unit OfWork)과 결합하면 여러 번의 조작을 같은 사무에 넣기 위해서다. 모두 성공하거나 실패하거나(Commit).데이터의 일관성을 보장합니다.
창고류 수정
먼저 창고 인터페이스에서 인터페이스의 반환 없음(void) 값 유형을 삭제하고 창고에 가서 클래스를 제거하는 SaveChanges 방법을 UOW에 맡겨 통일적으로 처리한다.
UOW 구현
SaveChanges를 분리하고 IUnit Offork 인터페이스를 정의합니다
namespace NetCoreWebApi.Repository { ///
/// /// public interface IUnitOfWork { ///
/// /// ///
int SaveChanges(); } }
实现IUnitOfWork接口
using System; using Microsoft.EntityFrameworkCore; namespace NetCoreWebApi.Repository { ///
/// /// public class UnitOfWork
: IUnitOfWork where TDbContext : DbContext { /// /// dbContext /// private readonly TDbContext _dbContext; ///
/// /// /// public UnitOfWork(TDbContext dbContext) { _dbContext = dbContext; } ///
/// /// public int SaveChanges() { int code; try { code = _dbContext.SaveChanges(); } catch (DbUpdateException e) { throw new Exception(e.InnerException == null ? e.Message : e.InnerException.Message); } return code; } } }
UOW依赖注入
因为AddDbContext默认生命周期是Scoped,所以用AddScoped注册UOW,确保每次请求共用同一个DbContex对象。
// DbContext
services.AddDbContext (options => options.UseSqlServer(connectionStr,e => e.MigrationsAssembly("NetCoreWebApi.Model")));
// Uow
services.AddScoped>();
UOW 사용
UserRepository 비즈니스 계층 수정
using System.Collections.Generic;
using System.Linq;
using NetCoreWebApi.Model.Models;
using NetCoreWebApi.Repository.Interface;
using NetCoreWebApi.Repository.Repository;
namespace NetCoreWebApi.Repository.Implement
{
///
///
///
public class UserRepository:IUserRepository
{
private readonly IUnitOfWork _unitOfWork;
private readonly IRepository _userRepository;
///
///
///
///
///
public UserRepository(IRepository userRepository,IUnitOfWork unitOfWork)
{
_userRepository = userRepository;
_unitOfWork = unitOfWork;
}
///
///
///
///
///
public int Add(TbUser entity)
{
_userRepository.Add(entity);
return _unitOfWork.SaveChanges();
}
///
///
///
///
///
public int Remove(TbUser entity)
{
_userRepository.Remove(entity);
return _unitOfWork.SaveChanges();
}
///
///
///
///
public IList GetAll()
{
return _userRepository.GetAll().ToList();
}
}
}
다중 창고의 지속화 작업이 있을 때 구조 함수에 의존하여 상응하는 창고에 주입하면 된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.