2012-03-20 4 views
1

이 코드의 목록은 개체의 상태를 변경. 예외 메시지는 관계의 일부인 1 객체 (shippingOrderItem) 만 있으므로 중복 키가 될 수 없기 때문에 나에게 혼란스러워 보입니다.관련 기관

상위 개체 (shippingOrder)가 분리 상태이며 새 shippingOrderItems를 삽입하고 싶지 않습니다. 기존의 것을 업데이트하고 싶습니다. 수정할 상태를 어떻게 바꿀 수 있습니까?

이 같은 외모와 협력하고있는 개체에 대한 의사 클래스 구조 :

public class ShippingOrder { 
    public List<ShippingOrderItem> ShippingOrderItems { get; set; } 
} 

public class ShippingOrderItem { 
    //This is the where I need to insert new records! Everything else is an update. 
    public List<ShippingOrderItemSerialNumber> ShippingOrderItemSerialNumbers { get; set; } 
} 
+0

이 시나리오에서'AddObject'를 사용하는 것이 옳지 않은 것 같습니다. ('AddObject'는 INSERT를위한 것이지만 당신은 UPDATE를 원한다). 첫 번째 줄을 제거하고 다시 시도 할 것을 제안합니다. – Slauma

+0

@Slauma - 나는 응답에 감사드립니다. 나는이 문제에 접근하는 방법을 생각해 내는데 어려움을 겪고있다. 내 이전 질문 (http://stackoverflow.com/questions/9792566/unable-to-attach-multiple-ent-for-insertion-an-object-with-the-ame-key-al)이 나타나면 내가 삽입해야하는 관련 엔티티가 있기 때문에 객체를 추가해야한다는 점입니다. 그러나 이제 개체를 추가 할 때 삽입하고 싶지 않은 다른 관련 엔터티를 변경할 수 없습니다. 나는 그 (것)들을 새롭게하고 싶다. 아이디어가 있습니까? 나는이 질문을 나의 클래스 구조로 업데이트했다. –

+0

위의 첫 번째 코드 조각에서 첫 번째 줄을 제거하려고 시도 했습니까? 내 의견으로는, 그것은 그 때 작동해야한다. 또는 동일한/다른 오류가 발생합니까? 업데이트의 경우 주문 및 주문 항목에 모두 올바른 기본 키 속성 값 집합이 있어야합니다. – Slauma

답변

3

코드의 줄 순서가 중요합니다. 나는 설명 할 수 없다, 왜. 그러나 나는 당신의 오류를 재현하고 코드 몇 줄을 교환하여 해결할 수 :

using (var orderContext = new ShippingEntities()) 
{ 
    orderContext.ShippingOrders.AddObject(shippingOrder); 
    foreach (var shippingOrderItem in shippingOrder.ShippingOrderItems) 
    { 
     orderContext.ObjectStateManager.ChangeObjectState(
      shippingOrderItem, EntityState.Modified); 
    } 
    orderContext.ObjectStateManager.ChangeObjectState(
     shippingOrder, EntityState.Modified); 

    orderContext.SaveChanges(); 
} 

shippingOrder 모든 shippingOrder.ShippingOrderItems를 업데이트하고 모든 ShippingOrderItemSerialNumbers를 삽입합니다. shippingOrdershippingOrder.ShippingOrderItems의 기본 키 속성 값은 정확해야하며 데이터베이스의 기존 행과 일치해야합니다. ShippingOrderItemSerialNumbers의 기본 키 속성 값은 중요하지 않으므로 모두 0 (데이터베이스에서 자동 생성 된 ID 인 경우)을 그대로 둘 수 있습니다.

+0

그 트릭을 했어! 도와 주셔서 감사합니다. Slauma, 고맙습니다. –

0

당신은 그것을 첨부 할 다음 수정 된 것입니다 표시 (AddObject 같이, 삽입 될 것입니다 뭔가를 추가하는 것입니다 슬라 우마는 말한다).

RIA는 당신을 위해이 작업을 수행하는 확장 메서드를 추가 한이 충분히 수행합니다

http://msdn.microsoft.com/en-us/library/ff423414(VS.110).aspx

그러나, 물론, 자신을 꽤 간단합니다.

+0

응답 해 주셔서 감사합니다.나는 원래'Attach'를 사용하려했지만, 내가 삽입하고 싶은 관련 엔터티가 있기 때문에 불가능했습니다. 이전 질문 (http://stackoverflow.com/questions/9792566/unable-to-attach-multiple-entitiesforfor-insertion-an-object-with-the-same-key-al)에서이 문제를 제기했습니다. 내 부모 개체를 업데이트하고 관련된 개체 집합을 개체 계층 구조 아래로 업데이트하는 가장 좋은 방법은 무엇입니까? 내 의사 클래스 구조로 게시물을 업데이트하여 명확하게 알려줍니다. –