2013-04-24 35 views
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(); 

我的問題是,我啓動了一次,它工作正常,但兩次我有這個錯誤:

An entity object cannot be referenced by multiple instances of IEntityChangeTracker.

爲什麼?

感謝您的幫助

+0

[C#實體框架「一個實體對象不能被IEntityChangeTracker的多個實例引用」]的可能重複(http://stackoverflow.com/questions/5128361/c-sharp-entity-framework-an-entity-object -can-no-reference-by-multiple-inst) – 2013-04-24 12:42:39

+0

'devAdded'對象不應該是靜態的。 – 2013-04-24 12:43:38

回答

2

函數和變量聲明的所有組合是什麼?
您正試圖將相同的靜態實例對象兩次添加到相同的DataContext,它將失敗。

  • 不聲明靜態變量。是壞的。
  • 不要將Context聲明爲字段。使用它作爲使用塊的局部變量。
  • 不要將訪問權限與像文本框一樣的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; 
} 
+0

嗨,我也試過這個代碼,但給出了同樣的錯誤信息 – dtjmsy 2013-04-24 12:47:43

+0

編輯你的問題併發布你的整個代碼。什麼屬性發展爲?它是否提及另一個物業? – 2013-04-24 12:52:36

+0

我錯誤的代碼,我再次嘗試,完美的作品,歡呼您的最佳實踐的意見,做什麼,不...再次感謝 – dtjmsy 2013-04-24 12:54:35

0

你不應該有你的數據庫實體的靜態對象。問題很可能是這條線:

public static Developper devAdded = new Developper(); 

將代碼更改爲@ Scorpi0推薦的代碼。

0

我的建議是:

答:學習基本的編程

什麼可能的原因聲明靜態:

public static Developper devAdded = new Developper(); 

B:然後開始尋找到EF等框架以後。