0
我遇到一个问题,我的更改未保存到数据库。没有错误被抛出。 这是奇怪的部分。只有当解决方案处于发布配置时才会发生。在发布配置中没有保存到数据库的更改
我不知道为什么会发生这种情况。我的第一个想法是,UnitOfWork
没有注入与存储库相同的DbContext
。但我确实将DbContext
与InRequestScope
绑定,所以不应该如此。
我已经抽象实体框架的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...
}
你能找出错误?
我不确定问题是否位于源代码中。您是否在配置管理器(菜单Build/Configuration Manager)中检查了项目设置,以了解Debug和Release版本之间的区别? – Martin
在Release配置中,它们都设置为Release和Any CPU。然而,我试图设置所有我的绑定到InRequestScope,并工作,至少在我的初步测试。 –
您是否将连接字符串设置为webconfig文件?因为您可以在调试和发布版本中使用不同的webconfig文件 – Daniel