2013-02-13 4 views
1

У меня есть объект EmployeeMonth, который сохраняет расчетный бонус и очки, полученные работником. В объекте EmployeeMonth есть объект BonusMonth. Объект BonusMonth устанавливает интервалы, которые работник должен получать каждый месяц, чтобы заработать бонус (этот объект устанавливается каждый месяц и не должен изменяться).Отображение Nhibernate, каскад, инверсия, обновление, вставка?

Когда я пересчитываю бонус с уменьшением, например: 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

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

session.Evict(employeeMonth.BonusMonth) 

Вы будете по-прежнему необходимо, чтобы каскад = "none", поскольку в противном случае он будет просто повторно прикреплять объект при сохранении employeeMonth.

+0

работал! Спасибо :) – Ivan