Я пытаюсь выполнить запрос через NHibernate, где критерий результата зависит от идентификатора ссылочной таблицы.Как мне это сделать?Давайте рассмотрим простой пример:
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
public Bar ReferencedBar { get; set; }
}
public class Bar
{
public int Id { get; set; }
public string Name { get; set; }
}
Затем Foo отображается на Bar:
public class FooMapping : ClassMap<Foo>
{
public FooMapping()
{
Id(c => c.Id).GeneratedBy.HiLo("1");
Map(c => c.Name).Not.Nullable().Length(100);
References(c => c.Bar);
}
}
Теперь я хочу получить все Foo из базы данных, которые ссылаются на определенный Bar по идентификатору.Эта функция использует критерии, но, пожалуйста, приведите примеры, используя что-то еще, если вы считаете, что это лучше:
public IList<Foo> GetAllFoosReferencingBar(int barId)
{
using (var tx = Session.BeginTransaction())
{
var result = Session.CreateCriteria(typeof(Foo))
.Add(Restrictions./* foo.ReferencedBar == id */) // <-- How to add restriction using id?
.List<Foo>();
tx.Commit();
return result;
}
}
Когда я пытаюсь сделать это с помощью, я получаю исключение:
.Add( Restrictions.Eq( "ReferencedBar", 32 ) );
Несоответствие типов в NHibernate.Criterion.SimpleExpression: ожидаемый тип ReferencedBar Bar, фактический тип System.Int32
У меня еще нет ссылочного объекта на Bar с идентификатором 32 и я не хочу его создавать ...