2013-02-13 42 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) 

你仍然會需要有cascade =「none」,否則當您保存employeeMonth時它只會重新連接實體。

+0

工作!謝謝 :) – Ivan 2013-02-13 14:19:43