Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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# 一个实体对象不能被多个IEntityChangeTracker实例引用。这是什么意思?_C#_Database_Winforms_Ef Code First - Fatal编程技术网

C# 一个实体对象不能被多个IEntityChangeTracker实例引用。这是什么意思?

C# 一个实体对象不能被多个IEntityChangeTracker实例引用。这是什么意思?,c#,database,winforms,ef-code-first,C#,Database,Winforms,Ef Code First,我已经阅读了很多关于这个问题的主题,但我仍然不明白为什么会出现这个错误。 抛出标题中提到的错误:db.megrendlesek.Add(form.uj) private void按钮1\u单击(对象发送者,事件参数e) { foreach(db.accountok中的科目项目) { if(item.Username==textBox1.Text&&item.Password==textBox2.Text) { MegrendelesForm=新的MegrendelesForm(项目作为账户);

我已经阅读了很多关于这个问题的主题,但我仍然不明白为什么会出现这个错误。
抛出标题中提到的错误:
db.megrendlesek.Add(form.uj)

private void按钮1\u单击(对象发送者,事件参数e)
{
foreach(db.accountok中的科目项目)
{
if(item.Username==textBox1.Text&&item.Password==textBox2.Text)
{
MegrendelesForm=新的MegrendelesForm(项目作为账户);
if(form.ShowDialog()==DialogResult.OK)
{
db.megrendelesek.Add(表格uj);
db.SaveChanges();
}
}
其他的
{
MessageBox.Show(“坏用户或pw”);
}
}
}
公共部分类MegRendersForm:Form
{
RaktarDB=新的RaktarDB();
公共Megrendeles uj{get;set;}
公共帐户belepett=新帐户();
公共报表(科目项目)
{
初始化组件();
belepett=项目;
var aruk=(来自数据库中的aru.aruk
选择aru.ToList();
listBox1.DataSource=aruk;
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
List aruk=新列表();
foreach(列表框2中的Aru项目2.项目)
{
添加(项目);
}
uj=新梅格伦德尔{account=belepett,aruk=aruk};
}
公共级幻灯
{
公共int ID{get;set;}
公共虚拟帐户{get;set;}
公共虚拟列表aruk{get;set;}
}
}

此错误通常源于维护两个上下文并尝试将实体从一个上下文附加到另一个上下文

在上面的示例中,我无法真正说明为什么会出现这种情况,但我想象form.uj是从另一个db实例填充的


与所有UI元素共享上下文通常是明智的,这可能会解决您的问题

是的,基本上我想创建一个订购程序。MegRenderForm的button1_Click事件返回一个MegRenderes(翻译成英文:order)对象,该对象包含订购者帐户id和订购的产品列表,并且以我想要更改为数据库的主形式。account和product在数据库中都有自己的表。但我对这一点真的很陌生,所以我只想问一下,共享上下文是什么意思?我该怎么做?
private void button1_Click(object sender, EventArgs e)
{
    foreach (Account item in db.accountok)
    {
        if (item.Username == textBox1.Text && item.Password == textBox2.Text)
        {
            MegrendelesForm form = new MegrendelesForm(item as Account);

            if (form.ShowDialog() == DialogResult.OK)
            {
                db.megrendelesek.Add(form.uj);

                db.SaveChanges();
            }
        }
        else
        {
            MessageBox.Show("Bad user or pw");
        }
    }
}

public partial class MegrendelesForm : Form
{
    RaktarDB db = new RaktarDB();
    public Megrendeles uj { get; set; }
    public Account belepett = new Account();

    public MegrendelesForm(Account item)
    {
        InitializeComponent();
        belepett = item;

        var aruk = (from aru in db.aruk
                select aru).ToList<Aru>();
        listBox1.DataSource = aruk;
    }


    private void button1_Click(object sender, EventArgs e)
    {
        List<Aru> aruk = new List<Aru>();
        foreach (Aru item in listBox2.Items)
        {
            aruk.Add(item);
        }

        uj = new Megrendeles {account=belepett,aruk=aruk };
    }
    public class Megrendeles
    {
        public int ID { get; set; }
        public virtual Account account { get; set; }
        public virtual List<Aru> aruk { get; set; }
    }
}