2012-09-04 3 views
2

XML 파일과의 직렬화가 가능한 데이터베이스 객체를 만드는 방법을 알아 내려고합니다.직렬화로 객체 관계형 매핑 유지

개체에 Entity Framework 데이터 모델을 사용하고 WCF RIA 서비스를 사용하여 클라이언트에서 사용할 수 있도록하고 있습니다. 주어진 객체를 데이터베이스에서 가져 와서 XML 파일로 직렬화 할 수 있기를 원합니다.

는 과거에 나는이 시도하고 다음과 같이 내가으로 실행하는 문제는 다음과 같습니다

  • 나는 각 개체에 대해 IXmlSerializable을 구현하는 경우는, 다음 직렬화시 각 개체가 다른 개체의 아무것도 알고 비 직렬화되고있다. 이것은 일종의 버블이며 객체 참조에 대한 외래 키 ID를 해석 할 방법이 없습니다.

  • 위의 문제에 대한 유일한 해결책은 부모 개체가 참조를 추적하고 필요에 따라 할당하는 큰 직렬화 및 비 직렬화 방법을 작성하는 것입니다. 이것은 각 객체가 자체 직렬화를 담당하는 대신 객체가 변경 될 때마다이 큰 메서드를 지속적으로 유지해야하므로 매우 나쁜 방식이라고 느낍니다.

  • 서로 중첩 된 개체의 표준 XML 디자인은 ORM 모델에서 제대로 작동하지 않습니다. 그 이유는 어떤 객체는 여러 개의 다른 객체에 대한 참조를 가지고 있으며 다른 객체에 의해 사용될 수 있습니다. 따라서 그 객체를 부모 객체의 하위 요소로 만들 수 없습니다.

    <User Name="John Smith"> 
        <FavoriteMovies> 
         <Movie Name="The Big Lebowski" Year="1998" ... /> 
        </FavoriteMovies> 
    </User> 
    
    <User Name="Robert Jones"> 
        <FavoriteMovies> 
         <Movie Name="The Big Lebowski" Year="1998" ... /> 
        </FavoriteMovies> 
    </User> 
    

    은 분명히 내가 같은 영화의 두 인스턴스가 안 :

는 다음과 같은 XML을 고려하십시오. 오히려 직렬화은 다음과 비슷한 모습이 될 것

<User Name="John Smith"> 
    <FavoriteMovies> 
     <Id>5</Id> 
    </FavoriteMovies> 
</User> 

<User Name="Robert Jones"> 
    <FavoriteMovies> 
     <Id>5</Id> 
    </FavoriteMovies> 
</User> 

<Movies> 
    <Movie Id="5" Name="The Big Lebowski" Year="1998" ... /> 
</Movies> 

WCF는 이미 직렬화 등 SOAP/JSON /로 내 개체를 직렬화하는 방법을 알고있다. 데이터 서비스를 사용합니다. XML 파일에 직렬화 할 때 다시 사용할 수 있습니까?

데이터베이스 외래 키 ID에 의존하는 것이 대부분의 경우 개체에 기본 ID가 있으므로 아마 작동하지 않을 것입니다. WCF는 설정된 개체에 의존하지 않고 개체를 serialize하고 ID는 SQL 데이터베이스에 저장되면 할당됩니다.

답변

0

EF 및 개체 모델 작동 방식에 익숙하지 않지만 WCF를 통해 직렬화/역 직렬화되는 대부분의 개체의 경우 DataContractSerializer를 직접 사용할 수 있습니다. 간단한 연습은 this article을 참조하십시오.

XML을 상호 운용 할 필요가 없으므로 중복 데이터가 발생하지 않도록 preserveObjectReferences 설정을 사용할 수도 있습니다.

+0

매우 장황한 것처럼 보이지만 내 EntityFramework 모델 컨테이너에 대한 정보를 직렬화하기는하지만 유망 해 보입니다. –

0

DataContractSerializer가 비트 버기가되는 즉시 Json.NET serializer http://json.codeplex.com/을 사용하는 것이 좋습니다. 예를 들어 Json.Net 시리얼 라이저가 더 좋은 이유에 대한 더 많은 연구를 위해이 질문을 볼 수도 있습니다.

관련 문제