2011-08-02 4 views
0

저는 아직도 Linq와 힘든 시간을 보내고 있습니다. 목록이있는 객체를받는 Update Function을 작성해야합니다. 사실, 지역에는 도시 목록이 있습니다. 나는 "지역"이라는 이름의 객체와 도시 목록을 가진 객체를 전달하려고합니다. 문제는 도시 객체가 다른 컨텍스트에서 왔고이 컨텍스트에 연결할 수 없다는 것입니다. 나는 여러 함수를 시도해 왔으며 항상 "EntitySet이 열거 중에 수정되었습니다"또는 기타와 같은 오류가 발생합니다. 아래의 코드를 작성하려고 노력하고 있지만, 다른 접근법이 있으면 도움을주십시오.개체에 목록이있을 때 LINQ에서 업데이트 함수를 만드는 방법은 무엇입니까?

public int Updateregion(region E) 
    { 
     try 
     { 
      using (var ctx = new AppDataDataContext()) 
      { 
       var R = 
         (from edt in ctx.regiaos 
         where edt.ID == E.ID 
         select edt).SingleOrDefault();    
       if (R != null) 
       { 
        R.name = R.name; 
        R.description = E.description; 
       } 
       R.cities = null; 
       R.cities.AddRange(Edited.Cities); 
       ctx.SubmitChanges(); 
       return 0 //OK! 
      } 
     } 
     catch (Exception e) 
     { 
      ...... 
     } 
+0

혹시 인센티브가 필요한가요? 브라질 최고의 미식가 커피 한 킬로그램을 기꺼이 최고의 해결책으로 보내 드리겠습니다. – Fabio

답변

1

한 데이터 인터페이스에서 가져온 개체를 다른 개체로 연결할 수 없습니다. Linq-to-SQL에서는 지원하지 않습니다. 어떻게 든 원래의 컨텍스트에서 개체를 분리해야하지만이 역시 지원되지 않습니다. 하나는 dettach 방법을 사용할 수없는 이유를 궁금해 할 수 있지만, 적어도 당신이 할 수있는 새로운 개체에 대한 목록을 매핑하여 그것을 가짜 :

var cities = Edited.Cities.Select(city => new City { 
    ID = city.ID, 
    Name = city.Name, 
    /* etc */ 
}); 
여기서 핵심은 기본 키를 매핑의지도를하지 기억하는 것입니다

관계 성질 그것들은 null로 설정되어야합니다. 이 후, 당신은 새로운 도시 목록을 부착 할 수 있어야하며 예상대로 작동해야합니다.

+0

AHM, 나는 이것을 시도하고 작동하지만 엄청난 양의 코드가 필요하기 때문에 가치가있는 것보다 훨씬 많은 문제가 발생합니다. 이 작업을 수행해야한다면 ADO를 사용하는 것이 좋습니다. 다른 방법이 있습니까? – Fabio

+0

내가 아는 한, 이것은 컨텍스트에서 엔티티를 분리하는 유일한 방법이지만, 나는 그것이 귀찮다는 것에 동의한다. 이렇게하고 싶지 않다면 같은 컨텍스트에서 객체를 가져올 수있는 방법을 찾아야합니다.하지만 그렇게하면 저장소 패턴이 엉망이 될 수 있습니다. – AHM

+0

AutoMapper를 사용하여 매핑을 더 간단하게 만들 수도 있지만 관계 속성을 건너 뛰도록 구성해야합니다. 그래야 위대하지도 않습니다. 그러나 최소한 당신은 한 곳에서 구성을 가질 것입니다 .... – AHM

관련 문제