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