2008-11-21 76 views
2

休眠版本:2.0.1GANHibernate - 在相關表中創建記錄

我試圖在兩個表中添加一條記錄。這些表格是相關的。我有初學者對NHiberate的瞭解,所以我希望有更好的方法來做到這一點。

目前,我認爲唯一可以獲得新增記錄ID的方法是執行SaveOrUpdate;然後對象的ID字段被設置(因爲我在SQL Server 2005 Express中使用自動增量)。

爲了在相關表中添加記錄,我必須設置其父項的ID字段。以下是我現在所做的:

transaction = session.BeginTransaction(); 

Contact myContact = new Contact(); 

myContact.Company = "ABC Company"; 
myContact.Notes = "test"; 

session.SaveOrUpdate(myContact); 

Address myAddress = new Address(); 
myAddress.IdContact = myContact.Id; 
myAddress.City = "Any City"; 
myAddress.State = "XX"; 
myAddress.Zip = "12345"; 

session.SaveOrUpdate(myContact); 

// Commit transaction 
transaction.Commit(); 

請注意,ADDRESS與CONTACT有關。每個地址1個聯繫人。

爲了添加ADDRESS記錄,我必須具有相應的聯繫人ID,我相信我只能在創建聯繫人記錄後才能獲得該記錄,因此我使用了兩次「SaveOrUpdate」。

更好的出路呢?

謝謝!

+0

請正確格式化您的代碼示例。如果您在行的開頭放置了四個空格,則會將其格式化爲代碼塊 – 2008-11-21 15:59:46

回答

3

有一種更簡單的方法。

首先,在添加地址對象到您的聯繫對象

public class Contact 
{ 
    public Contact(){} 
    private IList<Address> _addresses; 
    public IList<Address> Addresses 
    { 
      get 
      { 
       if(_addresses == null) _addresses = new List<Address>(); 
       return _addresses 
      } 
      set 
      { 
       _addresses = value; 
      } 
    } 

然後在你的映射文件屬性映射地址到地址表中您的數據庫。

像這樣的事情在你的映射文件聯繫人:

<bag name="Addresses" cascade="all-delete-orphan" lazy="false"> 
    <key column="Address_FK" /> 
    <one-to-many class="DomainModel.Address, DomainModel" /> 
</bag> 

然後設置Contact類的級聯特性:

default-cascade="save-update" 

現在,當你填充地址對象的聯繫,並保存聯繫人對象,地址對象集合將自動保持。

如果需要,我可以做更完整的示例。

相關問題