#entity-framework #architecture #entity-framework-4.1 #nhibernate-criteria
#entity-framework #архитектура #entity-framework-4.1 #nhibernate-критерии
Вопрос:
Я хотел бы услышать некоторые отзывы о сценарии, который я пытаюсь реализовать. В настоящее время я реализовал этот сценарий, используя Criteria API для NHibernate, и мне было интересно, было ли что-нибудь подобное, реализованное для Entity Framework 4.1.
Мне нужно, чтобы конечный пользователь мог выбирать критерии фильтрации из пользовательского интерфейса и, таким образом, создавать запрос, который может содержать сложные И / ИЛИ критерии.
Например: пользователь может сказать: Я хочу, чтобы учащиеся с (Zip Code = 92037 AND Gender = F) OR (ZipCode = 92101 and Gender = M)
или
Я хочу, чтобы учащиеся с (State = CA OR State = FL) AND GPA = 4.0 AND GENDER = M
Эти запросы обычно создаются с использованием элемента управления деревом во внешнем интерфейсе.
В настоящее время я работаю над этим с использованием NHibernate. Criteria API в NHibernate действительно великолепен для этого. Однако в NHibernate есть серьезная ошибка, которая заключается в том, что он не допускает многократных объединений в таблице 1: many.
Так, например, если бы у меня была таблица, содержащая CATCODE (код категории) и ответ, NHibernate в настоящее время не позволит мне выполнять множественные запросы с использованием Criteria API.
Поэтому я не могу, например, сделать: WHERE CATCODE = A and Answer in (A,B,C) AND CATCODE = B and Answer in (V,H,Y)
.
Из-за этого ограничения я пытался перейти из NHibernate в Entity Framework. Я не знал, есть ли хороший способ делать такого рода вещи с использованием API.
Кто-нибудь может подсказать мне лучшее решение для достижения такой функциональности, если оно есть?
Хотелось бы услышать от экспертов NHibernate и EF, есть ли способы решить эту проблему.
Ответ №1:
Я действительно не знаю NHibernate или любой другой OR / M, кроме entity framework, но давайте предположим, что у вас есть объект, называемый Category, и категория имеет отношение к ответам (например, у каждой категории много ответов). Итак, объект категории выглядит следующим образом:
public class Category {
public virtual string CATCODE{get;set}
public virtual IList<Answer> Answers{get;set;}
}
И тогда вы можете сделать что-то вроде:
Categories.Where(x=>x.CATCODE =="A").Where(x=>x.Answers.Any(l=>l.Name=="1" || l.Name=="2" || l.Name==3)
Я даже уверен, что есть лучший способ написать этот запрос, но дело в том, что это возможно.