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 回答