0

도메인 구동 디자인과 EF 4.1을 사용하여 시스템을 구축하고 있습니다. 내 속성 중 일부에서는 불법적 인 값을 설정하지 못하도록 논리를 설정하고 예외가 발생하면 예외를 throw합니다. 내 수업을 인스턴스화 할 때 EF가 새로운 임시 수업을 만들었다 고 생각했습니다. MyClass_abc123 ... 모든 가상 멤버를 재정의하여 MyClass에서 상속하여 DB의 데이터로 설정할 수 있습니다. EF가 아래의 클래스를 인스턴스화하고 MyObj 속성을 설정하려고하면 예외가 발생합니다. 누구든지 그것을 해결할 수있는 단서가 있거나 좋은 방법이 있습니까?Entity Framework 4.1 - 코드를 먼저 작성하십시오. EF가 가상 멤버를 재정의하지 않습니까?

public class MyClass 
{ 
    private MyObject _myObj; 
    public virtual MyObject MyObj 
    { 
     get { return _myObj; } 
     set 
     { 
      if (!check some logic...) 
       throw new Exception(); 

      _myObj = value; 
     } 
    } 
} 

BR 필립

+0

우리는 세터에서 어떤 논리가 실행되는지 알지 못합니다. 속성을 재정의 (override)하는 것은 문제가되지 않습니다. 그것은 당신의 논리의 문제입니다. –

+0

만약 내가 쓰기 만한다면 "logic"일을 건너 뛰십시오 : set {throw new Exception();} 그것은 예외를 던질 것입니다. 하지만 EF가 자신의 재산으로 재산을 무효화 할 것이라고 생각 했나요? – Philip

답변

3

EF는 내부 논리를 무시하지 않습니다. EF는 그것을 래핑 만하며 래퍼 속성은 여전히 ​​기본 setter 및 getter를 호출합니다.

편집 :

이 문제를 피하는 방법은 없습니다. 단순히 엔티티에 논리를 넣으면 그 논리에 대한 책임이 있습니다. setter는 속성을 설정해야하기 때문에 데이터베이스에서 엔티티를로드 할 때도 호출됩니다. 데이터베이스에서 엔티티를로드 할 때 로직을 실행하지 않으려면 오브젝트가로드 된 후 유효성 검증을 켜는 다른 로직을 추가해야합니다. 당신이 처리 할 수있는 당신의 유효성 검사를 설정하려면 다음을 구체화 개체의 유형을 확인하고 TurnOn 기능을 노출 입력하고 단순히 호출로 변환 할 필요가

var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext; 
objectContext.ObjectMaterialized += YourHandler 

핸들러 ObjectMaterialzied에서.

+0

좋아요, 제가 어떻게해도 작동하지 않도록 할 수있는 방법이 있습니까? – Philip

+0

감사! 나는 그것을 시도 할 것이다./Philip – Philip

+0

@Philip 답으로 표시해주세요. – Shimmy

관련 문제