1

我有一个 EmployeeMonth 对象,它保存计算出的员工获得的奖金和积分。在 EmployeeMonth 对象中有一个 BonusMonth 对象。BonusMonth 对象设置员工每月必须达到的间隔才能获得奖金(此对象每月设置,不应更改)。

当我通过减少重新计算奖金时,例如:88%,我调整 BonusMonth 对象间隔,然后重新计算奖金。然后将新的奖金(结果)保存在同一个 EmployeeMonth 对象中。

然后当我保存新的 EmployeeMonth 时,BonusMonth 也会被保存。

如何配置休眠映射以便不保存 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>
4

1 回答 1

0

它与级联无关 - 这是因为 BonusMonth 实体与 NHibernate 会话相关联。我个人建议不要更改 BonusMonth 实体,除非您希望更改保留到数据库中,但是如果您坚持,您可以通过从会话中分离 BonusMonth 实体来解决此问题:

session.Evict(employeeMonth.BonusMonth)

您仍然需要 cascade="none" 否则它只会在您保存employeeMonth 时重新附加实体。

于 2013-02-13T13:03:22.697 回答