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