我有一个EmployeeMonth对象,用于保存员工获得的计算奖金和积分。在EmployeeMonth对象中有一个BonusMonth对象。 BonusMonth对象设置员工每月必须达到的间隔才能获得奖金(此对象每月设置一次,不应更改)。
当我重新计算奖励时减少例如:88%,我调整BonusMonth对象间隔,然后重新计算奖金。 然后新的奖金(结果)保存在同一个EmployeeMonth对象中。
当我保存新的EmployeeMonth时,BonusMonth也会保存。
如何配置nhibernate映射,以便不保存BonusMonth?我只想更新/保存重新计算的EmployeeMonth值。
这就是我的映射的样子:
EmployeeMonth.cs
public class EmployeeMonth
{
public virtual Guid Id { get; private set; }
public virtual BonusMonth BonusMonth { get; set; }
public virtual Employee Employee { get; set; }
public virtual int WorkReductionPercent { get; set; }
public virtual int Points { get; set; }
public virtual decimal Bonus{ get; set; }
}
BonusMonth.cs
public class BonusMonth
{
public virtual int BasicPoints { get; set; }
public virtual int ExtraPoints { get; set; }
public virtual int MaxPoints { get; set; }
public virtual decimal BasicBonus { get; set; }
public virtual decimal ExtraBonus { get; set; }
public virtual decimal MaxBonus { get; set; }
}
EmployeeMonth.hbm.xml
<class name="EmployeeMonth">
<id name="Id">
<generator class="guid" />
</id>
<property name="WorkReductionPercent"/>
<property name="Points"/>
<property name="Bonus"/>
<many-to-one name="Employee" unique-key="EpId" column="EmployeeId" cascade="none" not-null="true" insert="true" update="false" />
<many-to-one name="BonusMonth" column="BonusMonthId" cascade="none" not-null="true" insert="true" update="false" />
</class>
BonusMonth.hbm.xml
<class name="BonusMonth">
<id name="Id">
<generator class="guid" />
</id>
<property name="BasicPoints"/>
<property name="ExtraPoints"/>
<property name="MaxPoints"/>
<property name="BasicBonus"/>
<property name="ExtraBonus"/>
<property name="MaxBonus"/>
</class>
答案 0 :(得分:0)
它与级联无关 - 这是因为BonusMonth实体与NHibernate会话相关联。我个人建议不要更改BonusMonth实体,除非你希望更改持久存储到数据库,但是如果你坚持,你可以通过从会话中分离BonusMonth实体来解决这个问题:
session.Evict(employeeMonth.BonusMonth)
您仍需要使用cascade =“none”,否则只需在保存employeeMonth时重新附加实体。