2012-06-11 2 views
2

Linq to SQL 데이터베이스 컨텍스트를 사용하여 ASP.NET 동적 데이터 웹 사이트에서 작업하고 있는데 질문이 있습니다. 내 테이블 중 하나 인 ARReports에는 원시 XML 데이터가있는 열이 있으며이 데이터를 EditedBy, ReleaseDate 및 기타 필드와 같은 다른 데이터와 함께 ReportDetails 개체로 deserialize 할 수 있습니다.ASP.NET 동적 데이터 복잡한 개체 편집

ReportDetails에는 사용자 지정 Edit.aspx 페이지에 표시하려는 여러 공용 속성이 있습니다.

내 목표는 사용자가 Edit.aspx 페이지로 이동할 때 ARReports 행과 ReportDetails의 공용 속성 (모두 기본 유형)을 편집 할 수있게하려는 것입니다. 그런 다음 업데이트 할 때 : ReportDetails 개체를 XML로 다시 serialize하고 테이블의 해당 필드를 업데이트합니다.

어쨌든 내가 말할 수있는, ReportDetails 유형의 ARReport 클래스 (Linq to SQL 클래스)에 속성을 만들고 해당 클래스를 Edit.aspx 페이지에 비계 할 수 있습니까? 다음과 같습니다 아마 뭔가 :

public partial class ARReport 
{ 
    private ReportDetails _details; 

    public ReportDetails Details 
    { 
     get 
     { 
      if (_details == null) 
        _details = ReportDetails.DeSerialize(this.RawXML); 
      return _details; 
     } 
     set 
     { 
      this.RawXML = ReportDetails.Serialize(_details); 
     } 
} 

public class ReportDetails 
{ 
    public String Owner {get; set;} 
    public DateTime LastEdit {get; set;} 
    //...etc... 

    public static String Serialize(ReportDetails report) 
    { 
      // serialization code 
    } 

    public static ReportDetails DeSerialize(String rawXML) 
    { 
     // deserialization code 
    } 
} 

난 내가하지만 지금까지 엄격한 구글 검색을 찾고 무엇을 달성하기 위해 클래스와 속성에 적용 할 수있는 특성 및/또는 트릭의 조합이 희망입니다 어떤 해결책도 제시하지 못했습니다. 나는 이것이 너무 혼란스럽지 않았 으면 좋겠다. 도움이나 통찰력에 감사드립니다.

답변

3

이렇게 할 수 있습니다. L2D 데이터 컨텍스트의 ReportDetails OUT 속성을 유지하는 것을 고려하십시오 (하나의 열을 제외하고 DB에 명시 적으로 없기 때문에).

내가 제안하는 것은 보고서 세부 정보에 대한 사용자 지정 필드 템플릿을 작성하는 것입니다. UIHintAttribute를 사용하여 편집/세부 정보 페이지에서 해당 필드 템플리트를 제대로 참조하십시오. 컨트롤을 채우기 전에 보고서 세부 정보를 POCO로 deserialize하고 평소와 같이 컨트롤을 채우십시오.

datacontext에서 SubmitChanges 이벤트를 무시하고 ARReport에 대한 업데이트를 확인하고 속성 값을 변경하십시오 변경 사항을 제출하십시오.

public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode) 
{ 
    ChangeSet changeset = GetChangeSet(); 
    foreach (var change in changeset.Updates.OfType<ARReport>()) 
    { 
     // serialize ReportDetails here before submitting changes. 
    } 
    try 
    { 
     base.SubmitChanges(ConflictMode.ContinueOnConflict); 
    } 
    catch (ChangeConflictException cce) 
    { 
     // handle this 
    } 
} 
+0

감사드립니다. 전에 UIHintAttribute를 사용하거나 살펴 본 적이 없습니다. 내 프로젝트에서 이것을 사용할 수 있는지 나중에 알게 될 것입니다. – LamdaComplex