這個錯誤引發了很多,但我找不到解決方案。我是新來的實體框架,並在我的第一個方法,我得到了這個錯誤。C#實體框架「一個實體對象不能被IEntityChangeTracker的多個實例引用」
這就是我所擁有的。我有一個公司類和一個分支類。這兩個類都有自己的存儲庫。一個公司有一個分公司,而一個分公司可以有多個公司。
在我的GUI我填一個組合與分公司的對象,這是我從我的BranchRepository得到:
public IList<Branch> GetAllBranches()
{
var query = _context.Branches;
IList<Branch> branches = query.ToList();
return branches;
}
這是結果是該分支組合框的數據源。
當我想挽救公司,我做這樣的事情:
company.VisitorAddress = txtVisitAddress.Text;
company.City = txtCity.Text;
company.CompanyName = txtCompany.Text;
company.PhoneNumber = txtPhoneNumber.Text;
company.ZipCode = txtZipcode.Text;
company.Branch = ((Branch)cmbBranches.SelectedItem);
company.Website = txtWebsite.Text;
然後,我打電話給我的公司資料庫,以節省我的公司。這裏是保存方法是這樣的:
public bool Save(Company company)
{
_context.AddToCompanies(company); // <-- This is where the error is thrown.
_context.SaveChanges();
return true;
}
當調用保存方法,我得到的錯誤「一個實體對象不能被IEntityChangeTracker的多個實例引用」。
很明顯我做錯了什麼,但是什麼?
是的,每個存儲庫都有它自己的'ObjectContext'。那麼我怎樣才能以一種整潔的方式共享'ObjectContext'?使用單身人士是一個好方法嗎? – Martijn 2011-02-26 17:12:01
沒有單身人士不是一個好方法 - 在這裏檢查我的答案:http://stackoverflow.com/questions/3653009/entity-framework-and-connection-pooling/3653392#3653392要走的路可以傳遞ObjectContext實例到存儲庫構造函數,但是您必須在存儲庫之外處理SaveChanges。 – 2011-02-26 17:15:13
我正在使用winforms。但我不知道如何分享'ObjectContext'。我不希望客戶意識到這種情況。 – Martijn 2011-02-26 17:20:02