2013-04-21 66 views
0

我已阅读了有关此问题的许多主题,但我仍无法理解为什么会出现此错误。
抛出在标题中提到的错误:db.megrendelesek.Add(form.uj);一个实体对象不能被IEntityChangeTracker的多个实例引用。这是什么意思?

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

回答

0

这个错误通常来自维护两个环境,并试图从一个附加实体到另一个环境。

在你上面的例子中,我无法真正说明这是为什么,但我想form.uj是从任何数据库的另一个实例填充。

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

+0

是的,基本上我想创建一个订购程序。 MegrendelesForm的button1_Click事件给出了一个Megrendeles(翻译成英语:order)对象,其中包含orderers帐户ID,以及订购产品列表,以及我想要更改为数据库的主表单。帐户和产品在数据库中都有自己的表。但我真的很陌生,所以我只想分享一个上下文来问你是什么意思?我怎样才能做到这一点? – fzl 2013-04-21 09:02:54

相关问题