【问题标题】:An entity object cannot be referenced by multiple instances of IEntityChangeTracker. What does it mean?一个实体对象不能被多个 IEntityChangeTracker 实例引用。这是什么意思?
【发布时间】:2013-04-21 01:44:00
【问题描述】:

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

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

【问题讨论】:

    标签: c# database winforms ef-code-first


    【解决方案1】:

    此错误通常来自维护两个上下文并试图将一个实体从一个上下文附加到另一个上下文。

    在您上面的示例中,我无法真正说出为什么会这样,但我想 form.uj 是从任何 db 的另一个实例填充的。

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

    【讨论】:

    • 是的,基本上我想创建一个订购程序。 MegrendelesForm 的 button1_Click 事件返回一个 Megrendeles(翻译为英语:order)对象,其中包含订购者帐户 ID 和订购的产品列表,并且在我想更改为数据库的主表单中。帐户和产品在数据库中都有自己的表。但我对此真的很陌生,所以我只想问一下分享上下文是什么意思?我该怎么做?
    猜你喜欢
    • 2011-11-01
    • 2011-10-12
    • 1970-01-01
    相关资源
    最近更新 更多