NHibernate LINQ查询-对象引用未保存的临时实例-不保存

NHibernate LINQ查询-对象引用未保存的临时实例-不保存,nhibernate,linq-to-nhibernate,Nhibernate,Linq To Nhibernate,我在执行nHibernate LINQ查询时遇到了一个奇怪的异常。 如果我写 var address=新地址{Id=Guid.Empty}; session.Query().Where(x=>x==address.ToList(); 比我得到的还多 对象引用未保存的临时实例-保存临时实例 实例,或将属性的级联操作设置为 可以让它自动保存的东西。类型:DomainModel.Address, 实体:DomainModel.Address 在 NHibernate.Engine.Foreig

我在执行nHibernate LINQ查询时遇到了一个奇怪的异常。 如果我写

var address=新地址{Id=Guid.Empty};
session.Query().Where(x=>x==address.ToList();

比我得到的还多

对象引用未保存的临时实例-保存临时实例 实例,或将属性的级联操作设置为 可以让它自动保存的东西。类型:DomainModel.Address, 实体:DomainModel.Address

在 NHibernate.Engine.ForeignKeys.GetEntityIdentifierIfNotUnsave(字符串 entityName、对象实体、ISessionImplementor会话)位于 NHibernate.Type.EntityType.GetIdentifier(对象值, ISessionImplementor会话)在 NHibernate.Type.ManyToOneType.NullSafeSet(IDbCommand cmd,Object 值,Int32索引,ISessionImplementor会话)位于 NHibernate.Param.NamedParameterSpecification.Bind(IDbCommand, IList
1 multiSqlQueryParametersList,Int32 singleSqlParametersOffset,
IList
1 SQLQueryParameters列表,QueryParameters QueryParameters, ISessionImplementor会话)在 NHibernate.Param.NamedParameterSpecification.Bind(IDbCommand, IList
1 SQLQueryParameters列表,QueryParameters QueryParameters,
ISessionImplementor会话)在
NHibernate.SqlCommand.SqlCommandImpl.Bind(IDbCommand,
ISessionImplementor会话)在
NHibernate.Loader.Loader.PrepareQueryCommand(查询参数
查询参数、布尔滚动、ISessionImplementor会话)位于
NHibernate.Loader.Loader.DoQuery(ISessionImplementor会话,
QueryParameters QueryParameters,布尔返回代理)位于
NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor
会话,QueryParameters QueryParameters,布尔返回代理)位于
NHibernate.Loader.Loader.DoList(ISessionImplementor会话,
查询参数查询参数)位于
NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor
会话,查询参数查询参数)位于
NHibernate.Loader.Loader.List(ISessionImplementor会话,
QueryParameters QueryParameters,ISet
1查询空间,IType[] 结果类型)在 NHibernate.Hql.Ast.ANTLR.Loader.QueryLoader.List(ISessionImplementor 会话,查询参数查询参数)位于 NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor 会话,查询参数查询参数)位于 NHibernate.Engine.Query.HQLQueryPlan.PerformList(查询参数 查询参数、ISessionImplementor会话、IList结果)位于 NHibernate.Impl.SessionImpl.List(IQueryExpression查询表达式, 查询参数查询参数,IList结果)位于 NHibernate.Impl.AbstractSessionImpl.List(IQueryExpression queryExpression,QueryParameters参数)位于 NHibernate.Impl.ExpressionQueryImpl.List()位于 NHibernate.Linq.DefaultQueryProvider.ExecuteQuery(NhLinqExpression nhLinqExpression、IQuery查询、nhLinqExpression nhQuery)位于 NHibernate.Linq.DefaultQueryProvider.Execute(表达式)
在NHibernate.Linq.DefaultQueryProvider.Execute[TResult](表达式 表达式)位于Remotion.Linq.QueryableBase
1.GetEnumerator()处
System.Linq.Buffer
1..ctor(IEnumerable
1源代码)位于
System.Linq.Enumerable.ToArray[TSource](IEnumerable
1源)

然而,如果我写

var person=newperson{Id=Guid.Empty};
session.Query().Where(x=>x==person.ToList();

一切正常。这两个类和相关映射之间的唯一区别是,地址使用标记进行映射,而Person属于继承映射Party=>Person,并使用进行映射

我知道我可以使用键字段而不是对象重写查询,但是这只是问题的一个真正简化版本,并且这个解决方案不适用

你知道这种行为吗

谢谢, Marco

看看QBE(通过示例查询):

看看QBE(通过示例查询):


感谢您的快速回复,但QBE与Linq to nHibernate的关系如何?我遗漏了什么吗?从你的问题来看,这是你试图实现的,使用一个对象来执行查询。是的,这是正确的,但你的解决方案意味着从LINQ切换到QBE,不幸的是,这在我的场景中是不可行的。好的。如果你不能切换到QBE,也不能查询属性,你应该解释你的整个问题,否则很难为你提供帮助。我已经更改了一些内容,并切换了属性查询,现在它可以工作了。也许我想要实现的是nHibernate不支持的东西。我将问题标记为已回答,鉴于此评论,感谢您的快速回复,但是QBE与Linq到nHibernate的关系如何?我遗漏了什么吗?从你的问题来看,这是你试图实现的,使用一个对象来执行查询。是的,这是正确的,但你的解决方案意味着从LINQ切换到QBE,不幸的是,这在我的场景中是不可行的。好的。如果你不能切换到QBE,也不能查询属性,你应该解释你的整个问题,否则很难为你提供帮助。我已经更改了一些内容,并切换了属性查询,现在它可以工作了。也许我想要实现的是nHibernate不支持的东西。基于此评论,我将问题标记为已回答