使用以下代码,我在我的存储库中搜索特定的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中已经存在具有相同键的对象
有人能解释我吗?
感谢。
答案 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
即可