这个错误引发了很多,但我找不到解决方案。我是新来的实体框架,并在我的第一个方法,我得到了这个错误。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