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以让我实现这种憎恶?
答案 0 :(得分:1)
您可以使用HQL进行更新:
session.CreateQuery("update Partner set Id = :newId where Id = :oldId")
.SetParameter("newId", newId)
.SetParameter("oldId", oldId)
.ExecuteUpdate();
我建议您Evict
会话中的实体,或者如果您要更新ID,请使用无状态实体。