2013-07-25 4 views
4

코드 첫 번째 모델 (pet 프로젝트)에서 Entity Framework를 사용하고 있으며 간단한 클래스를 편집하고 스키마가 자동으로 업데이트되는 것을 좋아합니다. 나는 다음과 같은 클래스가 :Entity Framework 코드가있는 XML 필드

[Table("Polygons")] 
public class Polygon 
{ 
    public int PolygonId { get; set; } 
    public String Texture { get; set; } 

    public virtual ICollection<Point> Points { get; set; } 
} 

[Table("Points")] 
public class Point 
{ 
    public int PolygonId { get; set; } 
    public double X { get; set; } 
    public double Y { get; set; } 
} 

나 데이터베이스에 다각형을 저장하고, 자신의 텍스처를 조회 할 수 있도록하는 것이 유용합니다. 반면에 5,000 포인트를 가진 다각형을 데이터베이스에 저장하면 많은 인서트를 실행하는 데 영원히 걸리고 솔직히 개별 Polygon을 검색하는 것 외에는 Points를 쿼리하지 않을 것입니다. 나는 "포인트"테이블 제거의 "포인트"클래스 "PolygonId"제거 할 일은 사랑하고,

PolygonId int PK 
Texture varchar(255) 
Points XML 

과 같은 다각형 테이블 모습 뭔가를 줄 무엇

그런 다음 포인트를 테이블로 직접 저장되는 문자열로 직렬화하고 포인트 배열로 다시 직렬화하십시오. 거기에 EF 할 수있는 방법이 있나요, 또는 필드에 대한 사용자 지정 serializer/deserializer를 작성하려면 적어도 코드 기반에서 사용할 때 자동으로 보인다?

감사합니다,

답변

6

나는 다른 속성을 추가하고 직렬화를 할 수있는 몇 가지 코드를 작성해야한다고 생각합니다.

이 그것을 수행해야합니다

[Table("Polygons")] 
public class Polygon 
{ 
    public int PolygonId { get; set; } 
    public String Texture { get; set; } 

    [NotMapped] 
    public virtual ICollection<Point> Points { get; set; } 

    [Column("Points")] 
    [EditorBrowsable(EditorBrowsableState.Never)] 
    [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
    public string PointsXml 
    { 
     get 
     { 
      var serializer = new XmlSerializer(typeof (List<Point>)); 
      using (var stringWriter = new StringWriter()) 
      { 
       serializer.Serialize(stringWriter, Points.ToList()); 
       stringWriter.Flush(); 
       return stringWriter.ToString(); 
      } 
     } 
     set 
     { 
      var serializer = new XmlSerializer(typeof(List<Point>)); 
      using (var stringReader = new StringReader(value)) 
      { 
       Points = (List<Point>) serializer.Deserialize(stringReader); 
      } 
     } 
    } 
} 

EditorBrowsableDebuggerBrowsable 속성은 선택 사항이며 단지 인텔리 (이 유형이 라이브러리를 사용하는 경우) 및 디버거에 표시에서 XML 속성을 유지합니다.

관련 문제