更改未在发布配置中保存到数据库

时间:2015-11-05 12:00:19

标签: c# asp.net-mvc entity-framework ninject

我遇到的问题是我的更改未保存到数据库中。也没有抛出错误。 这是奇怪的部分。仅当解决方案处于发布配置时才会发生。

我不知道为什么会这样。我的第一个想法是UnitOfWork没有注入与存储库相同的DbContext。但我确实将DbContextInRequestScope绑定在一起,所以不应该这样。

我以下列方式抽象了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...
}

你能发现错误吗?

1 个答案:

答案 0 :(得分:0)

将所有绑定设置为InRequestScope似乎已修复它。 我假设Ninject意识到注入的依赖关系已绑定到InRequestScope,因此根据需要重新创建了依赖项。

情况似乎并非如此。

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