C# 在两个请求后保存ObjectContext依赖的对象(EF/MVC 3)

C# 在两个请求后保存ObjectContext依赖的对象(EF/MVC 3),c#,asp.net-mvc-3,entity-framework-4,C#,Asp.net Mvc 3,Entity Framework 4,使用EntityFramework,我将结合MVC3尝试以下内容 我有一个ObjectContext,它在每个请求开始时被初始化,并在请求结束时被释放。很像一个简单的UnitOfWork实现。现在考虑创建一个将要初始化的Order类(EF-generated)。我通过重载构造函数传递要使用的ObjectContext var order = new Order(myObjectContext); 然后在Order类中保存该实例(private字段)。在我设置了这个Order实例的一些属性之后(

使用EntityFramework,我将结合MVC3尝试以下内容

我有一个
ObjectContext
,它在每个请求开始时被初始化,并在请求结束时被释放。很像一个简单的
UnitOfWork
实现。现在考虑创建一个将要初始化的
Order
类(EF-generated)。我通过重载构造函数传递要使用的
ObjectContext

var order = new Order(myObjectContext);
然后在
Order
类中保存该实例(private字段)。在我设置了这个
Order
实例的一些属性之后(使用相同的
ObjectContext
)。我想把这个实例放在用户会话中,因为在保存订单之前,需要第二个网页来填充一些信息

这是我遇到的问题,在用户提交第二个网页后,我从会话中检索
Order
对象,设置更多属性,并通过
Order
对象在
ObjectContext
引用上点击
SaveChanges()
。第一个请求中的那个。我认为这是必需的,因为在第一次请求期间(当创建
订单
时),一些其他实体正在添加到一个订单集合中。所以我必须再次使用相同的上下文。问题是,在点击
.SaveChanges()
后,该方法不会返回任何错误或其他信息,但数据不会保存在数据库中。即使标识值也不会从零更改。没有发生任何事情

第一次尝试将对象添加到集合时:

this._context.Order.AddObject(this);
this._context.SaveChanges();
请注意,此代码位于方法中,放置在偏序类中。这一次,在
.AddObject()
上,我得到一条消息:

一个实体对象不能被多个IEntityChangeTracker实例引用。

我试图将
Order
对象从其原始上下文中分离出来,并将其重新附加到第二个请求中的上下文中,但这当然不起作用,因为
Order
属性之一是在第一个请求中检索和添加的其他实体的集合,因此与第一个
ObjectContext
一起

也许我可以通过在第一个请求结束时调用
.SaveChanges()
来解决这个问题。然后在下一个请求中,我必须使用该请求的
ObjectContext
从数据库中提取订单。问题是,我不想在第二个请求结束之前保存
订单


在我看来,会话中与
Order
实例一起保存的
ObjectContext
似乎需要“连接刷新”?

我不确定我是否理解您试图执行的操作,但似乎您希望对Order对象进行几次更改,并且仅在应用所有更改后保存它。如果我错了,请纠正我,但我认为您正在将ObjectContext作为参数传递给Order对象,然后将Order对象放入会话中以嵌入连接并将其维护到下一页

这可能是实体对象和ObjectContext断开连接的地方

我建议您看看自跟踪实体生成器-。也许这会帮助你-

这应该允许您根据需要执行尽可能多的回发,并让Order实例跟踪自己的更改。然后,您应该能够提交单个ObjectContext实例上的更改


如果这没有帮助,也许你可以提供更多的代码和解释。

我认为你说得很对,我将研究你提供的信息。谢谢。我希望你能弄明白。如果这对您有帮助,请记住将答案标记为正确:)尽管我没有使用您的解决方案(相反,我完全更改了一些应用程序的设计),但它似乎是解决我最初问题的有效解决方案。因此,我认为你的回答是正确的。