2011-04-20 4 views
1

고객 테이블 : 고객 (ID, 이름 status_id)이 있습니다.
상태 테이블 (상태, ID, 이름, 코드)이 있습니다.
고객과 상태 사이에 관계 (FK)가 있습니다. status_id (고객) = id (상태). 나는 상태 열거 및 고객 클래스를 가지고있는 .NET 코드에서 엔티티 프레임 워크가있는 열거 형 - 테이블 행 ID와 독립적 인 열거 형 값

:

enum Status { 
    status_1, 
    status_2, 
    status_3, 
    status_4 
} 

class Customer { 
    public virtual long id {get;set;} 
    public virtual string name {get;set;} 
    public virtual Status customer_status {get;set;} 
} 

나는의 의존성을 만들려하지 않기 때문에 DB에서 상태 행의 값을 가지고 있지 않습니다 열거 코드의 데이터 (하드 코드 된).

고객 클래스를 edmx에 표시하려면 엔티티 프레임 워크를 어떻게 사용할 수 있습니까?

편집 : 내가 찾은
모든 솔루션은 열거 값을 고객 테이블의 status_id와 동일한 것으로 가정합니다. 그들은 status_id 값의 가능성에 제약을주기 위해 나에게 매우 중요한 Status 테이블을 가지고 있지 않다.

답변

4

도 아니다. 열거 형은 전혀 지원되지 않으므로 statusId (공개 일 필요는 없음)와 열거 형에 대한 데이터베이스 레코드의 변환을 처리하는 매핑되지 않은 customer_status를 모두 포함하도록 클래스를 변경해야합니다. 코드에서 어떤 레코드 ID가 어떤 enum 멤버를 나타내는 지 알아야하기 때문에 recrod에 종속성을 포함시켜야합니다. 그것은 구조 매핑이 아니라 데이터 종속성을 포함하는 데이터 매핑입니다.

또한 상태 테이블을 모델에 포함하지 마십시오.

approach to fake enums in EFv4 하나가 있지만 코드를 더 변경해야하며 열거 형 멤버는 데이터베이스 레코드와 동일한 값을 사용해야 할 것입니다.

+0

@ 라디 슬라브 Mrnka : 정말 나를 도와줍니다. 나는 당신이 무엇을 제안하는지 이해하지 못합니다. 실제로 db에 저장된 값은 코드에 투명합니다. 코드는 값을 신경 쓰지 않고 상태 테이블의 코드를 나타내는 문자열을 고려해야합니다. 문자열 값을 enum (예제 링크와 동일하지만 int - using 문자열을 사용하는 대신)으로 변환하는 것과 같은 것을 생각했지만 접근 방법을 모르겠습니다. – Naor

+0

@Naor : 이것은 훨씬 더 복잡합니다. 탐색 속성에서 열거 형으로 값을 매핑하려고합니다. 따라서 모델에 상태 테이블을 추가해야합니다. 고객을로드 할 때마다로드해야하며 관련 엔티티를 열거 형으로 변환 할 별도의 매핑되지 않은 속성을 다시 정의해야합니다. 그리고 매핑되지 않은 속성은 엔터티 쿼리에 linq에서 사용할 수 없습니다. –

+0

@Ladislav Mrnka : 어떻게해야합니까? 어떤 "종속 값"가능성이 있습니까? .. 내 테이블에 데이터가 있습니다. 내 코드에서 모든 열거 형을 변경하는 것은 많은 작업입니다. – Naor