0

我正在尝试将新数据添加到我的数据库中,这是我的代码:

// This is the dbContext
private BugTrackerDBContainer db = new BugTrackerDBContainer();

//The objet with its properties
public static Developper devAdded = new Developper();
devAdded.Name = txb_name.Text;
devAdded.FirstName = txb_firtname.Text;

// Add to the database
db.AddToDevelopper(devAdded);
db.SaveChanges();

我的问题是我启动它一次,它工作正常,但两次我有这个错误:

一个实体对象不能被多个 IEntityChangeTracker 实例引用。

为什么 ?

感谢您的帮助

4

3 回答 3

2

函数和变量声明的所有这些混合是什么?
您尝试将相同的静态实例对象两次添加到相同的 DataContext 中,它将失败。

  • 不要声明静态变量。是坏的。
  • 不要将 Context 声明为字段。通过 using 块将其用作局部变量。
  • 不要将对文本框等 UI 元素的访问与对数据库的操作混为一谈。在您的应用程序中创建层。

一个例子 :

public void AddDevelopperButton_Click(object sender, EventArgs e)
{
    this.AddDevelopper(txb_name.Text, txb_firtname.Text);
}

public Developper AddDevelopper(string name, string firstName)
{
    Developper devAdded = new Developper();
    devAdded.Name = name;
    devAdded.FirstName = firstName;

    using(BugTrackerDBContainer db = new BugTrackerDBContainer())
    {
        db.AddToDevelopper(devAdded);
        db.SaveChanges();
    }
    return devAdded;
}
于 2013-04-24T12:42:27.503 回答
0

您不应该将数据库实体作为静态对象。问题很可能是这一行:

public static Developper devAdded = new Developper();

将代码更改为@Scorpi0 推荐的代码。

于 2013-04-24T12:44:14.270 回答
0

我的建议是:

A:学习基础编程

什么可能的原因声明为静态:

public static Developper devAdded = new Developper();

B:然后开始研究 EF 和其他框架。

于 2013-04-24T15:13:21.047 回答