2012-03-06 4 views
1

현재 엔티티 프레임 워크 모델 디자이너를 사용하여 오브젝트 모델 및 지속성 계층이 빌드 된 응용 프로그램을 개발 중입니다.엔티티에 사용자 정의 비 맵핑 특성 구현

내가 가진 요구 사항 중 하나는 "더티"상태 (변경됨), 상태 변경이 발생할 때, 가장 중요한 경우 연결이 끊어진 상태에서 작업 할 때마다 알려줄 수있는 상태를 내 엔터티에 제공하는 것입니다 방법. 그래서 IsDirty 부울 속성을 추가 할 T4 템플릿을 수정하기 시작했습니다. IsDirty이 변경 될 때마다 발생하는 이벤트가 추가되었고 모든 스칼라 속성의 xxxChanged 메서드에 this.IsDirty = true이 추가되었습니다. 엔티티가 문맥에 연결 만 부착 할 때 속성이 변경 될 때마다, 따라서 falseIsDirty 값을 변경하지 않을 경우

모든 것이 잘 작동, 나는이 예외가 나타날 수

속성을 'IsDirty 사용' 엔터티 개체에 유효한 엔터티 매핑이 없습니다. 자세한 내용은 Entity Framework 설명서를 참조하십시오.

여기서 내가 뭘 잘못하고 있니? 개체가 "활성"일 때만 중요한 개체 상태이므로이 속성을 내 데이터베이스에 매핑하지 않으려합니다. IsDirty 속성을 꾸미는데 사용해야하는 속성이 있습니까? 아니면 EntityObject를 파생시키고 상태 메커니즘을 구현해야합니까? 아니면 이것을 구현하는 방법에 대한 더 나은 조언이 있습니까?

감사합니다.


편집 : EDM 디자이너와 함께 Entity Framework 4.0을 사용하고 있습니다.

private bool isDirty; 
public event EventHandler DirtyStatusChanged; 

public bool IsDirty 
{ 
    get 
    { 
     return this.isDirty; 
    } 

    internal set 
    { 
     if (this.isDirty != value) 
     { 
      ReportPropertyChanging("IsDirty"); 
      this.isDirty = value; 
      ReportPropertyChanged("IsDirty"); 
      ReportDirtyStatusChanged(); 
     } 
    } 
} 

protected void ReportDirtyStatusChanged() 
{ 
    var handler = this.DirtyStatusChanged; 

    if(handler != null) 
    { 
     handler(this, EventArgs.Empty); 
    } 
} 
+0

http://stackoverflow.com/questions/3595404/how-not-persist-property-ef4-code-first의 가능한 중복 [NotMapped] –

+0

을 사용해보세요. NotMapped는 코드 우선으로 만 작동합니다. 나는 모델 퍼스트에 EDM 디자이너를 사용하고 있습니다. – Ucodia

+0

임 확실히 당신이 T4를 수정하고 (분명히 EF4.1 +) 작동해야 생성 된 엔티티에 대한 액세스 권한을 부여, 당신은 그것을 줄 수, 그렇지 않으면 내가 생각하는 모델보기에서 삭제하여 물건을 무시합니다. –

답변

1

가 마침내 오류 나 자신을 발견 : 여기

모든 기본 개체로 생성 된 코드의 조각이다. 문제는 내 재산 세터에 거짓말. ReportPropertyChanged/ing을 호출하는 대신 OnPropertyChanged/ing을 호출해야합니다.

ReportPropertyChanged/ing은 컨텍스트가 원래 엔티티 값과 현재 엔티티 값 사이의 변경 사항을 검색한다는 것을 의미하지만이 특성은 상점에 대한 맵핑이없는 상태 오브젝트이므로 원래 값의 개념은 의미가 없으므로 컨텍스트가이 속성에 대한 올바른 매핑을 찾지 못했습니다.

OnPropertyChanged/ing을 사용하여 방금 고쳤습니다.

관련 문제