2010-03-10 72 views
2

我真的困惑,因为我有一个共享使用FNH像这样映射一个共同的接口几个对象:流利NH和接口映射

  .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使用Criteria API,但不支持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]

到底发生了什么,我做了什么错误。

在此先感谢克里斯。

回答

0

与HQL你需要导入实际的接口,所以它知道它。

在HBM文件包括以下内容:

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

显然让它有意义第一。

+0

是不是这是FNH的这一部分:map.ImportType (); – Owen 2010-04-22 20:57:46