【问题标题】:Select unsaved object out of the session从会话中选择未保存的对象
【发布时间】:2009-09-18 12:05:14
【问题描述】:

在带有 C# 的 mssql 上使用 NHibernate 2.1。

我有 2 个不同的类,它们使用一个“组”对象。

<class name="OrderCode" table="OrderCode" polymorphism="explicit">

<id name="Id" column="ID">
  <generator class="native" />
</id>
...
<many-to-one class="Group" name="Group" column="GRUPPE" cascade="all" />
...

<class name="Alotment" table="Alotment">

<id name="Id" column="ID">
  <generator class="native" />
</id>
...
<many-to-one class="Group" name="Group" column="GRUPPE" cascade="all" />
...

导入脚本现在首先创建 OrderCode 并选择组,如果组不存在,它会创建一个新组。稍后在同一个脚本中,我创建了很多。同样的方式,选择是否有正确的组,如果没有,则脚本创建一个组。

有时 OrderCode 和 Alotment 需要同一个组,但如果该组不存在,脚本会创建两个组,导致第二个选择不会将该组从会话中删除。

我知道它是同一个会话。有没有办法让 IQuery、ICriteria 或 Session.Linq 选择不在会话中提交组?

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    据我所知,如果您使用会话保存或更新实体,您应该先刷新或提交您的更改,然后再从同一会话中取回它。 不能像这样使用组对象引用吗?

    using(var session=SessionFactory.OpenSession())
    {
    var group=(Group)session.CreateQuery(group_query_string).UniqueResult;
    if(group==null)
    {
    group=new Group();
    session.SaveOrUpdate(group);
    }
    ...
    var orderCode=new OrderCode{Group=group};
    session.SaveOrUpdate(orderCode);
    ...
    // and later in your code
    
    var alotment=new Alotment{Group=group};
    session.SaveOrUpdate(alotment);
    ....
    
    session.Flush();
    }
    

    【讨论】:

    • 我将引用组对象,认为如果我从会话中选择会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 2019-05-12
    • 2019-02-24
    • 2012-09-06
    相关资源
    最近更新 更多