Вопрос 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 если:
Править: Перемещенный вопрос, связанный с контекстом объекта к другому вопросу здесь.
По-видимому интервал <-> перечисление
не будет поддерживаться в первоначальной версии 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 операторы.