2015-11-05 66 views
0

我遇到一個問題,我的更改未保存到數據庫。沒有錯誤被拋出。 這是奇怪的部分。只有當解決方案處於發佈配置時纔會發生。在發佈配置中沒有保存到數據庫的更改

我不知道爲什麼會發生這種情況。我的第一個想法是,UnitOfWork沒有注入與存儲庫相同的DbContext。但我確實將DbContextInRequestScope綁定,所以不應該如此。

我已經抽象實體框架的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

我不確定問題是否位於源代碼中。您是否在配置管理器(菜單Build/Configuration Manager)中檢查了項目設置,以瞭解Debug和Release版本之間的區別? – Martin

+0

在Release配置中,它們都設置爲Release和Any CPU。然而,我試圖設置所有我的綁定到InRequestScope,並工作,至少在我的初步測試。 –

+0

您是否將連接字符串設置爲webconfig文件?因爲您可以在調試和發佈版本中使用不同的webconfig文件 – Daniel

回答

0

設置所有綁定到InRequestScope似乎已修復它。 我的假設是Ninject意識到注入的依賴關係綁定到InRequestScope,因此根據需要重新創建了依賴項。

看來並非如此。

kernel.Bind<MyContext>().ToSelf().InRequestScope(); 
kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope(); 
kernel.Bind(typeof(IGenericRepository<>)).To(typeof(GenericRepository<>)).InRequestScope(); 
相關問題