使用 EntityFramework,我正在尝试结合 MVC 3 进行以下操作。
我有一个ObjectContext
,它在每个请求开始时被初始化,并在请求结束时被处理。很像一个简单的UnitOfWork
实现。现在考虑有一个Order
类(EF 生成),它将被初始化。我通过ObjectContext
重载的构造函数传递要使用的。
var order = new Order(myObjectContext);
然后在Order
类内部保留这个实例(私有字段)。在我设置了这个实例的一些属性之后Order
(使用相同的ObjectContext
)。我想将此实例放在用户会话中,因为在准备保存订单之前需要第二个网页来填充一些信息。
这是我被卡住了,在用户提交第二个网页后,我Order
从会话中检索对象,设置更多属性并点击对象.SaveChanges()
的ObjectContext
引用Order
。所以第一个请求中提出的那个。我认为这是必需的,因为在第一个请求期间(Order
创建时),一些其他实体被添加到一个订单集合中。所以我必须再次使用相同的上下文。问题是在点击该.SaveChanges()
方法后没有返回错误或任何错误,但数据没有保存在数据库中。甚至身份值也不会从零开始变化。没有任何承诺。
当我第一次尝试将对象添加到集合中时:
this._context.Order.AddObject(this);
this._context.SaveChanges();
请注意,此代码在一个方法中,放置在部分 Order 类中。这一次,在.AddObject()
我收到消息:
An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
我试图将Order
对象从它的原始上下文中分离出来,并将其重新附加到第二个请求中的上下文,但当然这不起作用,因为其中一个Order
属性是其他实体的集合,在第一个请求中检索并添加,因此使用第一个ObjectContext
。
可能我可以通过.SaveChanges()
在第一个请求结束时调用来解决这个问题。然后在下一个请求中,我必须使用该请求的ObjectContext
. 问题是,我不想Order
在第二个请求结束之前保存。
ObjectContext
对我来说,会话中与实例一起保存的似乎Order
需要“连接刷新”?