Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法定义两个对象之间的关系-为什么?_C#_Asp.net_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 无法定义两个对象之间的关系-为什么?

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

我正在提交一个表单,其中包含一个用户id和一组以管道分隔的数字

模型如下所示:

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");
}