Проблема в ссылке «EntityFramework.SqlServer».
В моем проекте, когда я добавил Entity Framework 6.0.1 с использованием NuGet на уровне доступа к данным, я получил ту же ошибку на стороне клиента, поскольку на стороне клиента такой ссылки нет.
Итак, я решил проблему, добавив эту ссылку и на стороне клиента.
Что ж, у меня были отличные результаты с named_scope
такими:
named_scope :has_cat_older_than lambda { |a| { :conditions => ["men.id in ( select man_id from wives where wives.id in ( select wife_id from cats where age > ? ) )", a] } }
и
named_scope :has_young_wife_named lambda { |n| { :conditions => ["men.id in ( select man_id from wives where name = ? and age < 30)", n] } }
Теперь я могу успешно делать
Member.has_cat_older_than(6).has_young_wife_named('Miriam').has_young_wife_named('Vashti')
и получать то, что я ' м ожидая. Эти области не требуют использования объединений, и, похоже, они хорошо работают с другими стилизованными объединениями.
w00t!
Комментарий к вопросу о том, является ли это эффективным способом сделать это, или если существует более "рельсовый" путь. Может быть полезен способ включить область видимости из другой модели в качестве фрагмента подзапроса sql ...
Вы использовали наиболее родное решение для Rails. Прямой SQL будет иметь такую же производительность, поэтому нет причин его использовать.
Я использовал construct_finder_sql для выполнения частичного выбора одного named_scope в другом. Это может быть не для всех, но его использование позволяет нам ОСУШИТЬ пару named_scopes, которые мы использовали для отчетов.
Man.has_cat_older_than(6).send(:construct_finder_sql,{})
Попробуйте это в своем скрипте / консоли.