문제

질문 1:나는 EF4를 가지고 놀고 있으며 다음과 같은 모델 클래스가 있습니다.

public class Candidate {

public int Id {get;set;}
public string FullName {get;set;}
public Gender Sex {get;set;}
public EducationLevel HighestDegreeType {get;set;}
}

여기서 Gender 및 EducationLevel은 다음과 같은 열거형입니다.

public enum Gender {Male,Female,Undisclosed}
public enum EducationLevel {HighSchool,Bachelors,Masters,Doctorate}

다음과 같은 경우 후보자 클래스와 성별 및 교육 수준을 EF4와 함께 사용하려면 어떻게 해야 합니까?

  • 나는 모델 우선 개발을 한다
  • 나는 DB 우선 개발을 한다

편집하다:개체 컨텍스트와 관련된 질문을 다른 질문으로 이동했습니다. 여기.

도움이 되었습니까?

해결책

보기에 int <-> enum EF의 초기 릴리스에서는 지원되지 않습니다.4.나는 이것이 형편없다고 말하는 사람들의 의견에 동의합니다.

나를 위해 캐스팅을 수행하는 속성을 사용하고 있습니다.

public partial class MyEntity
{
  public MyEnum HurrEnum {get{return (MyEnum)Hurr;} set{Hurr = (int)value;}}
}

물건의 이름을 "정확하게" 지정하면 그렇게 나쁘지는 않습니다(즉, 어리석어 보이지 않는다는 뜻입니다).예를 들어 데이터베이스에 Reason으로 저장되는 ReasonCode 열거형이 있으므로 해당 속성의 Reason 및 ReasonCode 버전도 있습니다.지금은 충분히 잘 작동합니다.


첫째, 저는 이제 막 EF4를 사용하기 시작했기 때문에 작동 방식에 대해 잘 알지 못합니다.나는 L2S와 비슷하지만 더 나은 엔터티 지원을 제공한다고 가정합니다.이것을 소금 한 알과 함께 섭취하십시오.

분명히 말하면 이 속성은 편의를 위한 것이며 이 속성을 사용하여 데이터베이스를 쿼리하려고 하면 EF가 제대로 반응하지 않을 것이라고 90% 확신합니다.EF는 귀하의 속성에 대해 알지 못하며 이를 사용하여 SQL을 구성할 수 없습니다.그래서 이거:

var foo = from x in Db.Foos where x.HurrEnum == Hurr.Durr select x;

다음과 같은 경우 예상대로 작동하지 않을 수 있습니다.

var foo = Db.Foos.Where(x=> x.HurrEnum == Hurr.Durr);

아마도 전체 Foos 테이블이 메모리로 가져온 다음 구문 분석될 것입니다. 이 속성은 편의를 위한 것이며 데이터베이스에 적중된 후에만 사용해야 합니다! 와 같은:

 // this is executed in the sql server
 var foo = Db.Foos.Where(x=> x.Hurr == 1 || x.Hurr == 2).ToArray();
 // this is then done in memory
 var hurrFoos = foo.Where(x=> x.HurrEnum == Hurr.Durr);

차이점을 이해하지 못한다면 불장난을 하고 있는 것입니다.EF/L2S가 코드를 해석하고 이를 SQL 문으로 변환하는 방법을 배워야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top