首页 文章

NHibernate LINQ Query - 对象引用未保存的瞬态实例 - 不保存

提问于
浏览
2

当我执行nHibernate LINQ查询时,我有一个奇怪的异常 . 如果我写
var address = new Address {Id = Guid.Empty}; session.Query().Where(x=> x == address).ToList();

比我得到的

object引用未保存的瞬态实例 - 在刷新之前保存瞬态实例,或者将属性的级联操作设置为使其自动保存的操作 . 键入:DomainModel.Address,Entity:NHibernate.Engine.ForeignKeys.GetEntityIdentifierIfNotUnsaved(String entityName,Object entity,ISessionImplementor session)中的DomainModel.Address,位于NHibernate.Type.ManyToOneType的NHibernate.Type.EntityType.GetIdentifier(Object value,ISessionImplementor session) NHibernate.Param.NamedParameterSpecification.Bind上的NHibernate.Param.NamedParameterSpecification.Bind(IDbCommand命令,IList1 multiSqlQueryParametersList,Int32 singleSqlParametersOffset,IList1 sqlQueryParametersList,QueryParameters queryParameters,ISessionImplementor session)中的.NullSafeSet(IDbCommand cmd,Object value,Int32 index,ISessionImplementor session) (IDbCommand命令,IList1 sqlQueryParametersList,QueryParameters queryParameters,ISessionImplementor会话)NHibernate.SqlCommand.SqlCommandImpl.Bind(IDbCommand命令,ISessionImplementor会话)在NHibernate.Loader.Loader.PrepareQueryCommand(QueryParameters queryParameters,Boolean scroll,ISessionImplementor s) ession)NHibernate.Loader.DoQuery(ISessionImplementor session,QueryParameters queryParameters,Boolean returnProxies)NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session,QueryParameters queryParameters,Boolean returnProxies)NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters)NHibernate.Loader.Loader.List上的NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session,QueryParameters queryParameters)(ISessionImplementor session,QueryParameters queryParameters,ISet1 querySpaces,IType [] resultTypes)NHibernate.Hql.Ast.ANTLR . 位于NHibernate.Engine.Query.HQLQueryPlan.PerformList的NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session,QueryParameters queryParameters)中的Loader.QueryLoader.List(ISessionImplementor session,QueryParameters queryParameters)(QueryParameters queryParameters,ISessionImplementor session,IList结果) )在NHibernate.Impl在NHibernate.Linq.DepaultQueryProvider.ExecuteQuery(NhLinqExpression nhLinqExpression)的NHibernate.Impl.ExpressionQueryImpl.List()NHibernate.Impl.AbstractSessionImpl.List(IQueryExpression queryExpression,QueryParameters参数)中的.SessionImpl.List(IQueryExpression queryExpression,QueryParameters queryParameters,IList results) ,IQuery查询,NhLinqExpression nhQuery)NHibernate.Linq.DefaultQueryProvider.Execute(表达式表达式),位于System.Linq.Buffer1的Remotion.Linq.QueryableBase1.GetEnumerator()的NHibernate.Linq.DefaultQueryProvider.Execute [TResult](表达式表达式) System.Linq.Enumerable.ToArray [TSource](IEnumerable1 source)中的..ctor(IEnumerable1源代码)

但是,如果我写
var person = new Person {Id = Guid.Empty}; session.Query().Where(x=> x == person).ToList();

一切正常 . 两个类和相关映射之间的唯一区别是,Address使用<class />标记进行映射,而Person属于继承映射,Party => Person并使用<joined-subclass />进行映射

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

对这种行为有什么想法吗?

谢谢,马可

1 回答

相关问题