2

次のように 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 から]

一体何が起こっているのか、そして私は何を間違っているのか.

前もって感謝します、クリス。

4

1 に答える 1

0

HQL では、実際のインターフェイスをインポートして、それを認識する必要があります。

HBM ファイルには、次のものが含まれます。

<import class="Name.Space.IPipelineStep, Assembly" />

明らかに最初に意味をなすようにしてください。

于 2010-04-21T10:43:53.347 に答える