我使用[庫& UOW]模式與EF核心工作。爲什麼在EF核心中的每個API調用之後自動處理DbContext?
問題
大部分時間裏,每一個成功的呼叫上下文配置&拋出錯誤之後。
擴展方法
public static IServiceCollection AddDataAccessConfig<C>(this IServiceCollection services) where C : DbContext
{
RegisterDataAccess<C>(services);
return services;
}
private static void RegisterDataAccess<C>(IServiceCollection services) where C : DbContext
{
services.TryAddScoped<IUnitOfWork<C>, UnitOfWork<C>>();
}
ConfigureServices
//Register Context
services.AddDataAccessConfig<MyDbContext>();
services.AddDbContext<MyDbContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("DbCon"));
});
//Register Repository
services.TryAddScoped<IUserRepository, UserRepository>();
我曾嘗試與婁代碼。但沒有運氣
TryAddTransient
services.TryAddTransient<IUserRepository, UserRepository>();
庫基地
protected RepositoryBase(IUnitOfWork<C> unitOfWork)
{
UnitOfWork = unitOfWork;
_dbSet = UnitOfWork.GetContext.Set<E>(); // THIS LINE THROW ERROR
}
UOW
public UnitOfWork(C dbcontext)
{
_dbContext = dbcontext;
}
public C GetContext
{
get { return _dbContext; }
}
樣品呼叫服務
public IActionResult ByUser(string uid, string pwd)
{
var result = _userRepository.GetValidUser(uid, pwd);
if (string.IsNullOrEmpty(result))
{
return Request.CreateResponse(HttpStatusCode.Unauthorized);
}
else
{
return Request.CreateResponse(HttpStatusCode.OK, JsonConvert.SerializeObject(result));
}
}
你是什麼意思的「每一個電話後」?告訴我們這個代碼,你有什麼問題。 – DavidG
'使用[Repository&UOW]模式來處理EF Core' <=爲什麼? DbContext類型是一個UoW模式的實現,'DbSet類型是一個Repository模式的實現。爲什麼在你自己的相同模式實現中重新包裝這些類型?你沒有增加任何有價值的東西,只是增加了更多的代碼和抽象,這使得很難閱讀,調試和使用這些類型。 – Igor
@DavidG:我更新了我的帖子 –