实体框架更新?

时间:2011-03-09 00:29:11

标签: asp.net-mvc entity-framework

如何更新EF 4中的实体?

例如:

1)使用AutoMapper从服务层的Category实体生成CategoryEditModel。

2)将EditModel传递给View。大!!

3)回发EditModel,使用AutoMapper获取CategoryEditModel - >分类

4)获取该类别并将其传递给服务层,服务层将其传递给存储库,而存储库又传递一个ObjectSet.Attach(TEntity)。

告诉我ObjectStateManager有另一个具有相同键的对象???

我正在使用Ninject向Controller注入Service和UnitOfWork,带有存储库的服务,带有UnitOfWork的存储库。 UnitOfWork按要求确定范围。

似乎某些东西正在高速缓存中保存?

我是否必须在UOW上调用dispose或者Ninject会处理它吗?它确实实现了IDisposable,并且在dispose中它处理了上下文。

2 个答案:

答案 0 :(得分:0)

实体上下文缓存对象。一般认为保持特定环境的生命很短暂是明智的。我通过在每个存储库方法中使用工厂来完成此操作:

public SomeObject GetSomeObjectById(int id)
{
    using (var context = _contextFactory.Get())
    {
        return context.SomeObjects.SelectSingle(o => o.Id == id);
    }
}

如果您非常确定要遵循每个请求的一个上下文模型,则需要从上下文中加载您想要的实体(如果您使用{应该是免费的 {1}} 因为它听起来像是在这种情况下被缓存了),更改对象上的值,然后保存更改。

答案 1 :(得分:0)

我认为你应该只使用一个Entity Framework Session对象而不需要存储库。看一下这篇文章:Question about Interfaces and DI?如果您有疑问,请告诉我。它是代码优先的,它对我来说非常适合。

希望它可以帮到你!