ObjectStateManager中已存在具有相同键的对象

时间:2012-05-23 09:33:18

标签: linq

使用以下代码,我在我的存储库中搜索特定的Matrix,然后将其分配给Shuttle属性。

var requestRepository = unitOfWork.Create<Request>();
var matrixRepository = unitOfWork.Create<Matrix>();
...
var matrix = matrixRepository.Find(m => m.MatrixID == matrixID).FirstOrDefault();
request.Shuttle = matrix;
....

这很有效。我尝试另一种选择。使用以下代码,我准备一个Matrix对象并尝试将其附加到我的存储库。

var requestRepository = unitOfWork.Create<Request>();
var matrixRepository = unitOfWork.Create<Matrix>();
...
var matrix = new Matrix { MatrixID = matrixID };
matrixRepository.Attach(matrix);
request.Shuttle = matrix;
....

这不起作用。在attach语句中,我收到了错误:ObjectStateManager中已经存在具有相同键的对象

有人能解释我吗?

感谢。

1 个答案:

答案 0 :(得分:1)

首先,您只需找到元素并将其放入矩阵中。但是在第二种方式中,您尝试添加矩阵,该矩阵可以存在于matrixRepository中。

修改

var matrix = matrixRepository.Find(m => m.MatrixID == matrixID).FirstOrDefault();

这表明如果不返回默认值,matrixID可以在matrixRepository中。

但是这里

var matrix = new Matrix { MatrixID = matrixID };
matrixRepository.Attach(matrix); //if matrixRepository allready have matrix with matrixID  you will get error

您只需将其添加到matrixRepository

即可