我有一个基类ID为主键和3个版本号。
[NotNull]
public virtual int Id { get; private set; }
[NotNull]
[NotUpdatable]
public virtual int BaseVersion { get; set; }
[NotNull]
[NotUpdatable]
public virtual int MajorVersion { get; set; }
[NotNull]
[NotUpdatable]
public virtual int MinorVersion { get; set; }
现在我想再次持久化对象,如果它得到一个新的版本号,或者如果它不存在于数据库中。
foreach (var dataObject in unitOfWork.NewObjects)
{
if (dataObject.Id > 0)
{
_transactionHelper.GetSession().SaveOrUpdate(dataObject.DeepClone());
continue;
}
_transactionHelper.GetSession().SaveOrUpdate(dataObject);
}
我的想法是做一个深度克隆,但遗憾的是(对我来说)Nhibernate只更新现有的数据记录。我用
取得了一些成功_transactionHelper.GetSession().Evict(dataObject);
_transactionHelper.GetSession().Save(dataObject.DeepClone());
但是Nhibernate的级联功能不能正常工作,我有时会得到这个异常分离实体传递到持久化(什么是正确的)。
一些想法?或者我必须自己编程:/
谢谢!
我通过编写自己的映射容器来跟踪关系的状态,从而解决了这个问题。我认为主要的问题是/是我使用了我自己的复合表(我需要添加一些值,如active)。
要持久化一个已经持久化的实体,我使用:
_transactionHelper.GetSession().Evict(dataObject);
dataObject.Id = 0;
_transactionHelper.GetSession().Save(dataObject);