NHibernate - 在相关表中创建记录

问题描述:

休眠版本: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

有一种更简单的方法。

首先,在添加地址对象到您的联系对象

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" 

现在,当你填充地址对象的联系,并保存联系人对象,地址对象集合将自动保持。

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