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]
到底發生了什麼,我做了什麼錯誤。
在此先感謝克里斯。
是不是這是FNH的這一部分:map.ImportType(); –
Owen
2010-04-22 20:57:46