Сложность 200-300
После некоторого первичного осмотра Entity Framework, а также игр с его настройками и возможностями, настает момент, когда предыдущие наработки и стили использования кода переносятся на новую технологию.
Некоторое время назад я писал о фасаде доступа к данным на основе Linq2Sql и в этом подходе важную роль играл паттерн «спецификация», с помощью которого модифицировались запросы к базе данных для получения минимальной выборки, чтобы процесс фильтрации проходил средствами SQL сервера, что правильно. Хотелось бы данный подход распространить и на EF, однако все оказалось на первый взгляд не так просто и радужно как в L2S. Однако с помощью интернета и смекалки все трудности были успешно разрешены, и сейчас я расскажу, как это было решено.
Подготовка
Перед тем как собственно приступить к рассказу о реализации, необходимо немного времени уделить подготовке кода и исходных данных, с которыми будем работать. Использовать я собираюсь EF5 RC Code First и соответственно .Net 4.5. В качестве модели данных пусть у нас будет класс героев, для разнообразия (правда со свойствами класса фантазия наверно подкачала).
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class Hero { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public bool HasSuperpower { get; set; } public bool CanFly { get; set; } } public class Context : DbContext { public Context() : base("VioletTape") {} public DbSet<Hero> Heroes { get; set; } } |
Заполнение базы будем делать с помощью специального класса HeroicInitializer, приведу пару строчек заполнения: