2010-03-10 80 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