我遇到的问题是我的更改未保存到数据库中。也没有抛出错误。 这是奇怪的部分。仅当解决方案处于发布配置时才会发生。
我不知道为什么会这样。我的第一个想法是UnitOfWork
没有注入与存储库相同的DbContext
。但我确实将DbContext
与InRequestScope
绑定在一起,所以不应该这样。
我以下列方式抽象了Entity Frameworks DbContext:
public class UnitOfWork : IUnitOfWork, IDisposable
{
private readonly MyContext _context;
public UnitOfWork(MyContext context)
{
_context = context;
}
public int Save()
{
return _context.SaveChanges();
}
// omitted...
}
public class GenericRepository<T> : IGenericRepository<T>
where T : class
{
private readonly MyContext _context;
public GenericRepository(MyContext context)
{
_context = context;
}
public void Update(T entity)
{
_dbSet.Attach(entity);
_context.Entry(entity).State = EntityState.Modified;
}
// omitted...
}
我的绑定是这样设置的:
kernel.Bind<MyContext>().ToSelf().InRequestScope();
kernel.Bind<IUnitOfWork>().To<UnitOfWork>();
kernel.Bind(typeof(IGenericRepository<>)).To(typeof(GenericRepository<>));
请注意,DbContext与.InRequestScope()
绑定。
我的控制器看起来像这样:
public class FooController : Controller
{
private readonly IUnitOfWork _unitOfWork;
private readonly IGenericRepository<foo> _fooRepository;
public FooController(IUnitOfWork unitOfWork, IGenericRepository<foo> fooRepository)
{
_unitOfWork = unitOfWork;
_fooRepository = fooRepository;
}
public ActionResult Update(Foo foo)
{
_fooRepository.Update(foo);
_unitOfWork.Save();
}
// omitted...
}
你能发现错误吗?
答案 0 :(得分:0)
将所有绑定设置为InRequestScope
似乎已修复它。
我假设Ninject意识到注入的依赖关系已绑定到InRequestScope
,因此根据需要重新创建了依赖项。
情况似乎并非如此。
kernel.Bind<MyContext>().ToSelf().InRequestScope();
kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
kernel.Bind(typeof(IGenericRepository<>)).To(typeof(GenericRepository<>)).InRequestScope();