【发布时间】:2014-04-27 17:28:40
【问题描述】:
您好,我正在使用实体框架 5。我有三个模型:请求、区域、标签。 Request and Regions 和 Request and Tags 之间存在多对多关系。我跟着this 创建了一个类似向导的表单。所以我有三个视图模型。一个视图表单获取基本信息,另外两个表单获取与请求相关的标签(多选)和区域(多选)。
为了将相同的请求会话传递给相应的操作,我使用此函数来创建任何特定的请求模型实例并将其传递给相应的操作
private Request GetRequest()
{
if (Session["request"] == null)
{
Debug.WriteLine("New Session Creation");
Session["request"] = new Request();
}
Debug.WriteLine("SameSession");
return (Request)Session["request"];
}
我的控制器中有一个 Entities cxt = new Entities(); 实例
我从表单中获取选定区域和标签的 id 并查询数据库,以便像这样将它们添加到请求对象实例中。
RegionActionResult
long val;
foreach (var item in data.Regions)
{
val = Convert.ToInt64(item);
request.Regions.Add(cxt.Regions.Single(r => r.Id == val));
}
TagActionResult
long val;
foreach (var item in data.Tags)
{
val = Convert.ToInt64(item);
request.Tags.Add(cxt.Tags.Single(r => r.Id == val));
}`enter code here`
然后我把请求保存在这里
FinalActionResult
Request_Log request = GetRequest();
cxt.Request.Add(request);
cxt.SaveChanges();
调用最终操作来保存请求会引发错误An entity object cannot be referenced by multiple instances of IEntityChangeTracker. 我对实体框架很陌生,所以我不知道问题是什么。我只有一个上下文变量cxt 的实例,它用于获取区域和标签并将其添加到请求对象中,然后使用相同的上下文保存,所以我不知道如何在这里拥有多个上下文。我希望我的问题有意义。
【问题讨论】:
标签: c# entity-framework asp.net-mvc-4 session viewmodel