Отображение Nhibernate, каскад, инверсия, обновление, вставка?

У меня есть объект 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>

1 ответ

Решение

Это не имеет ничего общего с каскадированием - это потому, что сущность BonusMonth связана с сеансом NHibernate. Я бы лично рекомендовал не менять сущность BonusMonth, если вы не хотите, чтобы изменения сохранялись в базе данных, однако, если вы настаиваете, вы можете обойти эту проблему, отсоединив сущность BonusMonth от сеанса:

session.Evict(employeeMonth.BonusMonth)

Вам все еще нужно будет указать cascade="none", так как в противном случае он просто повторно присоединит сущность при сохранении employeeMonth.

Другие вопросы по тегам