次のように 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>();
})
;
このマッピングの奇妙な点は、Criteria api を使用して IPipelineStep に対してクエリを実行できるように見えることですが、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 から]
一体何が起こっているのか、そして私は何を間違っているのか.
前もって感謝します、クリス。