在nhibernate中更改id时的StaleStateException

时间:2010-07-27 11:25:06

标签: nhibernate fluent-nhibernate

NHibernate非常新,所以我希望能在这里快速解决。

我正在看的代码有一个非正统的设计。

public class Partner
{
    public virtual int Id { get; set;} //note the set is not private
    public virtual String Name { get; set;}
}

并使用FluentNhibernate的Automappings

进行映射

创建Partner时,其ID为0但是何时 我打电话给Flush坚持到db:

        CurrentSession.SaveOrUpdate(obj);
        CurrentSession.Flush();

我得到Unexpected row count: 0; expected: 1 StaleStateException

我假设它,因为NHibernate不喜欢我更改主键,Id。 在这种情况下,我需要。如何配置NH以让我实现这种憎恶?

1 个答案:

答案 0 :(得分:1)

您可以使用HQL进行更新:

session.CreateQuery("update Partner set Id = :newId where Id = :oldId")
       .SetParameter("newId", newId)
       .SetParameter("oldId", oldId)
       .ExecuteUpdate();

我建议您Evict会话中的实体,或者如果您要更新ID,请使用无状态实体。