我有一个基类,其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级联功能无法正常工作,我有时会将这个异常的分离实体传递给persist(什么是正确的)。
一些想法?或者我必须自己编程:/
谢谢!
答案 0 :(得分:0)
我通过编写跟踪关系状态的自己的映射容器解决了这个问题。我认为主要问题是我使用自己的复合表(我需要添加一些像活动的值)。
要保留我使用的allready持久化实体:
_transactionHelper.GetSession().Evict(dataObject);
dataObject.Id = 0;
_transactionHelper.GetSession().Save(dataObject);
看起来这个解决方案对我的问题很有效。