2015-01-24 2 views
0

Entity Framework를 사용하여 삭제 된 하위 개체 목록을 사용하여 개체를 저장하려고하면 이상한 오류가 나타납니다.제거 된 목록 항목에 대한 Entity Framework 저장 오류

특히 'a'유형의 개체 목록이 있습니다. 이러한 객체는 'b'유형의 연결 객체를 통해 서로 연결됩니다. 'a'객체는 많은 'b'객체를 가질 수 있고, 각각의 'b'객체는 단일 'a'객체 만 가질 수 있습니다. 그래서 기본적으로, 나는 'b'객체를 통해 다른 'a'객체에 0 이상의 연결을 갖는 'a'객체의 네트워크를 가지고 있습니다.

주어진 'a'개체의 'b'개체 목록은 가변적입니다. 'b'객체는 'a'객체의 목록에 추가되거나 제거 될 수 있습니다. 그러나 'a'개체의 목록에서 'b'개체를 제거하면 나중에 'a'개체의 네트워크를 저장하려고 할 때 Entity Framework에서 오류가 발생합니다. 코드가 실행 중일 때

public void RemoveConnection(b connectionObject) 
    { 
     myBObjects.remove(connectionObject); 
    } 

이 방법은 잘 작동하고, 'A'개체는 시간 절약에 객체 'B'의 정확한 목록을 가지고 :는 'A'개체의 'B'개체를 제거 코드는 다음과 같습니다 .

using (var db = new PersistenceContext()) 
      { 
       db.NetworkOfAs.Add(network); 
       db.SaveChanges(); 
      } 

는 'B'객체 'B'객체, 잘 위의 작품의 'A'개체의 목록에서 제거 적이없는 경우 : 다음은 저장 코드입니다. 'b'객체가 'a'객체의 'b'객체 목록에서 제거되었지만 'b'객체의 목록이 길이가 1보다 크거나 같으면 위의 내용도 정상적으로 작동합니다. 그러나 'b'객체가 추가 된 다음 'a'객체의 'b'객체 목록에서 제거되어 'a'객체의 'b'객체 목록이 길이 0으로 반환되면 다음 오류가 발생합니다.

The INSERT statement conflicted with the FOREIGN KEY constraint 
"FK_dbo.BObjects_dbo.AObjects_Id". The conflict occurred in database 
"NetworkDatabase.PersistenceContext\", table \"dbo.AObjects\", column 'Id' 

나는 며칠 동안 이것을 디버깅에 몰두 해왔다. 그리고 이것은 'a'객체에서 제거 된 'b'객체를 저장하려고하는 Entity Framework 때문에 발생하는 것으로 보인다. 객체의 'b'객체 목록입니다. 그러나, 나는 이것을 방지하는 방법을 모르고 있으며,이 특정 문제를 설명하는 것을 찾을 수 없습니다.

도움이 되시길 바랍니다.이 설명에 필요한 세부 사항이 누락되어 있으면 알려 주시기 바랍니다.

답변

0

당신이 노출 된 예외로, 나는 Db에 저장된 B 객체가있다. 그리고 나서 객체에 대한 참조를 제거하고 실제로 객체 자체를 제거하지 않는다고 말할 것이다. 따라서 참조가 없으면 B 객체의 외래 키와 충돌합니다.

관련 문제