2009-11-17 4 views
4

현재 Entity Framework (.NET Framework 버전 3.5 SP1로 패키지 된 버전)와 많은 AJAX 기반 기능, 나는 클라이언트 측에서 jQuery를 사용하고 서버 측에서 ASP.NET WebMethods를 사용하여 구현하고있다.ASP.NET WebMethod를 통해 JSON에서 Entity Framework 엔터티 (일대 다) 추가

[WebMethod] 
public static void Add(User user); 

이 메서드를 호출, 나는 자바 스크립트에서 (특성의 관점에서) 엔티티를 닮은 물체를 조립 다음과 같이

나는 일반적으로 매개 변수로 개체를 받아들이는의 WebMethod를 사용하여 새 개체를 만들 그것을 JSON 문자열로 전달하십시오. 그러나 관련 엔터티를 다 대다 관계로 전달하려고 시도 할 때 문제가 발생했습니다. User 엔티티가 Flight 엔티티와 일대 다 관계를 가지고 있다고 가정합니다. 여러 (새) 항공편으로 새 사용자를 추가하는 것이 문제가되는 것으로 증명됩니다. 다음 방법 : (역 직렬화 단계에서)하는 ASP.NET 오류

this.user.Flight = []; 
var x = new Object(); 
// Code here to populate x's properties 
this.user.Flight.push(x); 
// Repeat again for more flights 

결과 목록이 EntityCollection로 변환 할 수없는 상태.

는 그때 나는이 방법을 시도 :

this.user.Flight = {}; 
var x = new Object(); 
// Code here to populate x's properties 
this.user.Flight.firstFlight = x; 
// Repeat again for more flights 

이 경우을의의 WebMethod 성공적이라고했지만, 항공편을 완전히합니다 (의 WebMethod는 0을 반환()에서 user.Flight.Count를 호출) 분실되었다.

EntityCollection에서 여러 항공편을 WebMethod에 전달할 수있는 사람이 있습니까?

+5

사용자 이름이 나를 웃게했기 때문에 upvote를 사용하십시오. –

+1

+1 예, 참으로. – grenade

+0

코드에 EntityCollection이 표시되지 않습니다. 추가 설명/코드 스 니프를 제공 할 수 있습니까? –

답변

1

왜 그냥 다음, 두 번째 매개 변수로 비행의 목록을 반환 그들은 당신의 방법 내에서 사용자에 추가?

나는

+0

결국 나는 별도의 매개 변수로 전달하고 말한대로 추가했습니다. 이것은 정상적으로 작동했지만 "적절한"(또는 적어도 더 우아한) 방법이 있는지 궁금해했습니다. –

2

당신은을 사용하여 어려움이있을 수 있습니다 EF 매개 변수 [의 WebMethod], 그리고 .... 나는 일반적으로 매개 변수로 POD 구조를 통과, 그래서이 문제를 해본 적이 사용하지 않는 내장 직렬자를 사용하면서 EF 엔티티 클래스를 직접 사용하려고합니다. Javascript 배열에서 EntityCollection으로 deserialize 할 수 있었다고해도 다른 경로 (EF object graph to js obj)를 수행 할 수 없습니다. 유명한 "순환 참조"오류가 발생합니다.

저는 EF 및 웹 서비스를 사용하는 프로젝트가 많이 있습니다 (그러나 Dynamic Data 항목은 아직 사용하지 않았습니다). 시도 할 수있는 다른 좋은 옵션이있을 수 있습니다. 엔티티 클래스의 모든 속성과 관계를 나타내지 만 메서드 나 다른 코드는 포함하지 않는 DTO 또는 POD 클래스 ("데이터 전송 객체"또는 "일반 올드 데이터") 클래스를 만들 수 있습니다. 그것들은 쉽게 serialize 및 deserialize되어 전선을 통해 전달 될 수 있습니다. 하지만 순환 참조 오류가 발생할 수 있습니다. 이를 위해서는 순환 참조를 지원하는 Json.NET을 사용하여 직접 직렬화를 수행 할 수 있습니다. 문자열을 반환하도록 서비스를 수정해야하며 JavaScript 호출 사이트에서 json 문자열을 객체 리터럴로 평가해야합니다. 그것은 너무 많은 일이 아닙니다.

DataSvcUtil.exe을 사용하여 DTO 클래스를 만들 수 있습니다.

나는 현재 귀하의 문제를 해결하기 위해 노력하고있는 프로젝트를 준비하고 있습니다. 나는 당신이 진술 한 동일한 오류와 JavaScript에서 []를 {}로 바꿀 때 언급했던 것과 같은 행동을합니다.노력을 계속하고, 내가 찾으면 알려주지.

+0

가능한 솔루션을 제공해 주셔서 감사합니다. 위에 게시 한 것처럼 별도의 매개 변수를 사용하여 주위를 둘러 보았지만 시간이 있으면 제안 사항 중 하나를 시도합니다. 나는 이것을 할 수 없다는 점에 실망감을 느낄 수밖에 없다. 기본은 거기에있는 것처럼 보이지만 EF + JSON을 둘러싼 많은 문제가있다. 그래도 당신이 진전한다면 나에게 알려줘. –

관련 문제