Используя Платформу Объекта ADO.net 4 с Перечислениями? Как я делаю это?

Вопрос 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;}
}

Здесь Полом и EducationLevel являются Перечисления как:

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

Как делают я получаю кандидата Class и Пол и EducationLevel, работающий с EF4 если:

  • Я действительно моделирую первую разработку
  • Я делаю дб первая разработка

Править: Перемещенный вопрос, связанный с контекстом объекта к другому вопросу здесь.

8
задан Community 23 May 2017 в 12:11
поделиться

1 ответ

По-видимому интервал <-> перечисление не будет поддерживаться в первоначальной версии EF4. Я соглашаюсь с теми, кто говорит, что это сосет.

я использую свойство, которое делает кастинг для меня

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

, Он не выглядит так плохо при именовании материала "правильно" (что означает, таким образом, это не выглядит глупым). Например, у меня есть перечисление ReasonCode, это хранится как Причина в базе данных, таким образом, у меня есть версии Причины и ReasonCode свойства. Удается достаточно хорошо, на данный момент.


Первый, я только начинаю использовать EF4, таким образом, я не являюсь близким с тем, как он работает. Я принимаю ее подобное L2S, но с лучшей поддержкой сущности. Взять это с мелкой частицей соли.

, Чтобы быть ясным, это свойство для удобства, и я - 90%-й верный EF, будет реагировать плохо, при попытке запросить базу данных с помощью этого свойства. 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 операторы.

16
ответ дан 5 December 2019 в 10:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: