Я действительно сбит с толку, поскольку у меня есть несколько объектов, которые имеют общий интерфейс, отображаемый с использованием FNH, например:
.Where(t => (t.BaseType == typeof(Entity) || t.BaseType == typeof(PipelineStep))
&& t.Namespace.StartsWith("BigNose.Core.Domain")
&& !t.IsInterface)
.IgnoreBase<Entity>()
.IgnoreBase<PipelineStep>()
.Override<Project>(map => map.HasMany(p => p.Pipelines).Cascade.All())
.Override<ExpectationProcessingStep>(map =>
{
map.ImportType<IPipelineStep>();
map.ImportType<object>();
})
;
Теперь странным в этом отображении является то, что он позволяет мне выполнять запросы к IPipelineStep с использованием API Criteria, но не с Linq-to-NH или через HQL. Например:
Работы (Критерии):
UoW.Session.CreateCriteria(typeof(IPipelineStep), "p")
.Add(Restrictions.Eq("p.Pipeline", SampleData.PipelineB))
.SetMaxResults(10)
.List<IPipelineStep>()
.ToList();
Этот Linq терпит неудачу:
UoW.Session.Linq<IPipelineStep>()
.Where(p => p.Pipeline == SampleData.PipelineB)
.ToList();
За исключением:
System.InvalidOperationException:
Не удалось найти объект с именем:
BigNose.Core.Domain.PipelineSteps.IPipelineStep
НО, как ни странно, без ограничения это работает
UoW.Session.Linq<IPipelineStep>()
.ToList();
А с HQL он не работает даже без ограничений:
UoW.Session.CreateQuery("from IPipelineStep p").List<IPipelineStep>()
За исключением:
NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:
IPipelineStep не отображается [от
IPipelineStep p]
Что, черт возьми, происходит, и что я делаю, так неправильно?
Заранее спасибо, Крис.