C# 无法定义两个对象之间的关系-为什么?
我正在提交一个表单,其中包含一个用户id和一组以管道分隔的数字 模型如下所示:C# 无法定义两个对象之间的关系-为什么?,c#,asp.net,asp.net-mvc,entity-framework,C#,Asp.net,Asp.net Mvc,Entity Framework,我正在提交一个表单,其中包含一个用户id和一组以管道分隔的数字 模型如下所示: public class SeasonPassData { public int UserID { get; set; } public string SpaceNumbers { get; set; } } 正在被交给此控制器的: [HttpPost] public ActionResult SignUp(SeasonPassData data) { var user = db.Users
public class SeasonPassData
{
public int UserID { get; set; }
public string SpaceNumbers { get; set; }
}
正在被交给此控制器的:
[HttpPost]
public ActionResult SignUp(SeasonPassData data)
{
var user = db.Users.Find(data.UserID);
List<SeasonPass> passes = new List<SeasonPass>();
char[] delimiter = { '|' };
var numbers = data.SpaceNumbers.Split(delimiter).Select(n => Convert.ToInt32(n)).ToArray();
foreach(int number in numbers)
{
passes.Add(new SeasonPass { SpaceNumber=number, User = user });
}
passes.ForEach(p => db.SeasonPasses.Add(p));
db.SaveChanges();
return RedirectToAction("Confirmation", "Home");
}
但是,这个-传递.ForEach(p=>db.sensoripass.Add(p))代码>继续突袭此异常:
中发生“System.InvalidOperationException”类型的异常
System.Data.Entity.dll,但未在用户代码中处理
附加信息:两个对象之间的关系
无法定义,因为它们附加到不同的ObjectContext
对象
我该如何解决这个问题?
我尝试了这些基于评论的改变。它似乎仍然不起作用
[HttpPost]
public ActionResult SignUp(SeasonPassData data)
{
using(var context = new TTUContext())
{
var user = context.Users.Find(data.UserID);
List<SeasonPass> passes = new List<SeasonPass>();
char[] delimiter = { '|' };
var numbers = data.SpaceNumbers.Split(delimiter).Select(n => Convert.ToInt32(n)).ToArray();
foreach (int number in numbers)
{
passes.Add(new SeasonPass { SpaceNumber = number, User = user });
}
foreach (var pass in passes)
{
context.SeasonPasses.Add(pass);
}
context.SaveChanges();
}
return RedirectToAction("Confirmation", "Home");
}
[HttpPost]
公共行动结果注册(季节性数据)
{
使用(var context=new TTUContext())
{
var user=context.Users.Find(data.UserID);
列表过程=新列表();
字符[]分隔符={'|'};
var numbers=data.SpaceNumbers.Split(分隔符)。选择(n=>Convert.ToInt32(n)).ToArray();
foreach(整数中的整数)
{
添加(新的季节通行证{SpaceNumber=number,User=User});
}
foreach(变量传入过程)
{
context.passs.Add(pass);
}
SaveChanges();
}
返回操作(“确认”、“主页”);
}
我很惊讶你所做的事情不起作用,但这里有一种方法可以避免这个问题
将public int UserID{get;set;}
添加到季节通行证
,并将其设置为分配关系,而不是设置User
什么是db
?这是一个ObjectContext
?@DaveZych是的。很抱歉没有包括这一点。很有趣……我想知道lambda是在更新你的上下文还是什么?如果你只是做一个“常规的”foreach循环和/或在你的上下文中放置一个using{}块,会发生什么呢?@BobMac刚刚发布了你的建议中的更改-仍然没有运气。还有其他想法吗?我的朋友都快疯了。有两种想法,将public int UserID{get;set;}
添加到seasepass
中,并使用它设置用户关系。如果不起作用,您是否尝试重新启动IIS?也许是EF的缓存中有什么东西卡住了,导致了这种奇怪的行为。这就是我最后所做的。这是一种痛苦,但至少是有效的。
[HttpPost]
public ActionResult SignUp(SeasonPassData data)
{
using(var context = new TTUContext())
{
var user = context.Users.Find(data.UserID);
List<SeasonPass> passes = new List<SeasonPass>();
char[] delimiter = { '|' };
var numbers = data.SpaceNumbers.Split(delimiter).Select(n => Convert.ToInt32(n)).ToArray();
foreach (int number in numbers)
{
passes.Add(new SeasonPass { SpaceNumber = number, User = user });
}
foreach (var pass in passes)
{
context.SeasonPasses.Add(pass);
}
context.SaveChanges();
}
return RedirectToAction("Confirmation", "Home");
}