2014-10-13 2 views
0

다른 클래스 안에 복잡한 클래스를 저장하려고합니다. TypeMask는 Entity 내부에 포함됩니다. TypeMask는 ToString 메서드를 오버로드하고 Entity를 저장하는 시간이 오면 문자열 형식의 Mask prop를 저장하고 필요할 때 Entity 클래스를 다시로드해야 할 때 automaticaly이 문자열을 TypeMask로 변환합니다 (TypeMask의 생성자는 string을 사용하여 TypeMask를 빌드 할 수 있음). 그래서 내가 과부하를 걸거나 내가 진짜로 상속 한 것에서 무엇을 얻었습니까?EF 복잡한 클래스를 저장하는 방법

public class Entity 
{ 
    private TypeMask _typeMask; 

    [Key] 
    public int Id { get; set; } 

    public string TypeMaskString { get; set; } 

    [NotMapped] 
    public TypeMask Mask 
    { 
     get 
     { 
      if (this._typeMask == null && !string.IsNullOrEmpty(TypeMaskString)) 
      { 
       this._typeMaks = new TypeMask(this.TypeMaskString); 
       // Or some other way to create a TypeMask from string. 
      } 
      return this._typeMask; 
     } 
     set 
     { 
      this._typeMask = value; 
      this.TypeMaskString = value.ToString(); 
     } 
    } 
} 

여기에서 염두에 두어야 할 몇 가지가 있습니다

public class Entity 
{ 
    [Key] 
    public int Id { get; set; } 

    public TypeMask Mask { get; private set; } 
} 

답변

1

다음은이 작업을 수행 할 수있는 방법입니다. 코드에서 TypeMask 개체를 수정하면 개체를 다시 설정하여 TypeMaskString을 업데이트해야합니다. 물론 이것은 오류가 발생하기 쉽고 정교하므로 TypeMask은 하나의 방법 (Entity의 메소드 일 수도 있음)을 통해 수정할 수 있어야합니다.

대안은 항상 최신 값을 반환합니다 같은 속성 (지면에 null 검사를 생략)

public string TypeMaskString 
{ 
    get 
    { 
     return this.TypeMask.ToString(); 
    } 
    set 
    { 
     this.TypeMask = new TypeMask(this.TypeMaskString); 
    } 
} 

이제 TypeMask 객체가 변경 될 수 있으며, TypeMaskString하는 것입니다. 그러나 이것은 잠재적으로 TypeMask을 문자열과 여러 번 변환하기 때문에 성능에 영향을 줄 수 있습니다. 자주 반복되는 프로세스 인 DetectChanges을 실행하면 EF의 변경 추적 프로그램이 항상 TypeMaskString을 읽으므로 의심되는 것보다 자주 발생합니다.

관련 문제