這個問題要麼是由於我的項目設計不佳,我缺乏關於如何使用nhibernate的知識,或者兩者兼而有之(只是說明,我爲我的糟糕的項目設計指責nhibernate)。那就是:Nhibernate映射/設計問題
在我的域模型,我有以下的(我剪了很多多餘的讓事情變得簡單的):
的Event對象:
public class EventBO
{
public int ID { get; set; }
public String Name
{
get;
set;
}
private List<InviteeBO> _invitees = null;
public List<InviteeBO> Invitees
{
get { return _invitees; }
set { _invitees = value; }
}
}
而一個被邀請對象:
public class InviteeBO
{
public int ID { get; set; }
public String Name
{
get;
set;
}
private List<InviteeBO> _invitees = null;
public List<InviteeBO> Invitees
{
get { return _invitees; }
set { _invitees = value; }
}
private EventBO theEvent;
public EventBO TheEvent
{
get { return theEvent; }
set { theEvent = value; }
}
private InviteeBO invitedByUser = null;
public InviteeBO InvitedByUser
{
get { return invitedByUser; }
set { invitedByUser = value; }
}
}
創建事件時,創建事件的人自動添加到Event.Invitees列表中。然後,同一個人可以添加無限量的被邀請者,然後將其添加到剛剛添加到事件的受邀者對象中的受邀者列表。原因是因爲我需要不僅追蹤誰加入了賽事,而且還追蹤誰加入了誰。
我的問題是這樣的:當我保存一個事件時,事件的被邀請者列表中的每個被邀請者(在被邀請者數據庫表中),EventID被添加到數據庫的相應列中。此外,如果該Event.Invitees列表中的Invitee邀請好友(並因此將邀請者添加到其自己的Invitee.Invitees列表中),則保存事件將正確地寫入邀請對象,邀請者邀請他邀請的所有被邀請者也在Invitee數據庫表中)。問題:EventID未被添加到Event.Invitees列表中的所有被邀請者的被邀請者。
上帝......我正在做一個可怕的工作來解釋這個,我很抱歉。我可以在這裏提供無限的細節,但我不想超載這篇文章。請告訴我你是否需要其他任何東西來幫助我解決這個問題。
無論如何,這裏的事件和被邀請者映射文件的相關部分:
Event.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="DAL"
namespace="DAL.DAO.Entities">
<class name="EventDO" table="Events">
<id name="ID">
<column name="ID"/>
<generator class="native" />
</id>
<property name="Name">
<column name="Name"/>
</property>
<property name="Description">
<column name="Description"/>
</property>
<bag name="Invitees" table="Invitees" inverse="false" cascade="all" lazy="false" >
<key column="EventID"/>
<one-to-many class="InviteeDO" />
</bag>
</class>
</hibernate-mapping>
Invitee.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DAL" namespace="DAL.DAO.Entities" >
<class name="InviteeDO" table="Invitees">
<id name="ID">
<generator class="identity"/>
</id>
<property name="FullName"/>
<many-to-one name="TheEvent" cascade="none" column="EventID" lazy="false" />
<bag name="Contacts" table="Contacts" inverse="false" cascade="all" lazy="false" >
<key column="ContactOfUserID"/>
<one-to-many class="ContactDO" />
</bag>
<bag name="Invitees" table="Invitees" inverse="false" cascade="save-update" lazy="false" >
<key column="InvitedByID" />
<one-to-many class="InviteeDO"/>
</bag>
<property name="IsOrganizer"/>
<property name="IsCreator"/>
</class>
</hibernate-mapping>
更新 @Roberto埃爾南德斯 - 首先,感謝您的迴應。我真的很感激它。
其次,您只需使用我的DAL和DOs進行測試,然後運行。所以很顯然,將我的DOs轉換爲BOs的功能出了問題。
還有一些我做錯了,你指出。我已將子受邀者添加到父邀請對象,並將父邀請對象添加到事件邀請對象。然後我推測,保存事件將執行所有必要的持續性,包括對於被邀請的子女。很明顯,我錯了,我還需要將parentInvitee添加到該子項,並將該子項添加到Event.Invitees。謝謝!
很高興聽到一切正常! – 2012-03-13 18:15:08