2012-08-13 3 views
0
기업에 대한 탐색 속성을 implemening의 다른 방법은

복잡한 엔티티 탐색 속성을 정의하는 공식적인 방법은 다음과 같습니다프레임 워크

public class SuperEntity 
{  
    public int Id { get; set; } 
    //Other properties 
} 

public class LowerEntity 
{ 
    public int Id { get; set; } 
    public int SuperEntityId { get; set; } 
    public virtual SuperEntity SuperEntity { get; set; }  
    //Other properties 
} 

여기서 중요한 것은입니다 참조 (링크 된 슈퍼 엔티티를 탐색 할 수 있습니다) 그 클래스 public SuperEntity SuperEntity { get; set; } 속성뿐 아니라 public int SuperEntityId { get; set; }의 ID도 있습니다.

나는 "lower entities"의 public int SuperEntityId { get; set; } 속성을 제외하고 며칠 동안 내 엔터티 디자인을 보냈다. 그래서 가상의 SuperEntity 속성으로 만 탐색합니다. 모든 것이 잘 작동합니다! 하지만 나는 DB에 과도한 테이블을 생성한다고 사람들에게 말했습니다. 내가 확인해 봤는데 그건 사실이 아니야. 내 접근 방식을 사용할 때 DB 테이블에 SuperEntityId 열이 있고 참조 된 엔터티 ID가 자동으로 채워집니다. 이 public int SuperEntityId { get; set; } 필드의 요점은 무엇입니까?

또는 아마도 내가하고있는 일은 4.3과 같은 EF의 "최신"버전에서 사용할 수있게되었을 것입니다.

답변

2

SuperEntityId의 요점은 전체 시간 동안 컨텍스트가 살아 있지 않은 앱에서 외래 키 속성을 사용하는 것이 더 쉬울 때가 있다는 것입니다. webapp. 그런 상황에서 외래 키 속성을 사용하는 것이 개체 B를 개체 A에 첨부하는 것보다 훨씬 쉽습니다.
nav 속성을 사용하여 EF는 객체를 사용하여 2 개체. 따라서 객체 B를 객체 A에 연결하려면 연결이 끊어진 응용 프로그램에서 객체 A에 대한 속성을 설정하는 것만으로는 충분하지 않습니다. 또한 B와 B 사이의 관계를 등록하기 위해 변경 탐색기에서 객체 A의 입력을 피딩해야합니다. A. 외래 키 속성을 설정하는 것은이 비웃음과 동일합니다. EF로 시작한이 모든 것에 대해 몰랐을 때마다 2 개의 개체 (예 : B에서 A, B가 이미 DB에 존재했다면, B는 기존의 객체 대신 B가 새로운 객체라고 생각하고 DB에 기록을 복제했습니다.

+0

어쩌면 당신이 옳고 나중에 문제가 발생할 수 있습니다. 감사. –

+0

개체가 동일한 컨텍스트 인스턴스에서 떠 다니고 명시 적으로 연결될 필요가없는 경우 (일반적으로 데스크톱 응용 프로그램에서 필요하지 않음) 사용자는별로 문제가 없을 것입니다. –

+0

그냥 오늘 테스트 데이터베이스에서 중복 기록이 있다는 것을 알았습니다. 그들은 많은 브리지 테이블에 정의 된 관계를 포함하여 정확한 중복이었습니다. 나는 당황 스러웠다.하지만 단순히 새로운 로컬 DB에 문제가 있다고 생각하여 삭제했다. 당신이 묘사 한 것은 훨씬 더 그럴듯합니다. 그리고 나는 네비게이션 속성들을 함께 생각할 생각입니다. –

0

테이블을 만들지는 않겠지 만 테이블을 만들지는 않지만 해당 데이터베이스에 대해 추가 또는 더 길게 쿼리가 생성됩니다. 하지만 이러한 엔티티를 사용하는 방법에 따라 다릅니다.