0

我有下面的代碼使用存儲庫模式,支持流暢的nhibernate自動映射到MySQL數據庫。堅持2 NHibernate與一對多

下面的代碼片段將一個用戶和一個人添加到模型中,然後保留到數據庫中。

它的工作原理,但是我必須記得把user.Person.User = user;否則當對象被持久化時,Person已將FK userId設置爲空。

  1. 是否有辦法來自動使Person.User被填充,或者我需要創建要做到這一點的方法?

  2. 有沒有一種方法,以使與該用戶相關聯的所有對象被持久化(如只調用一個對象repository.Save(OBJ),並導致其他人也被保留。)

    using (MySQLRepositoryBase repository = new MySQLRepositoryBase()) 
        { 
         try 
         { 
          repository.BeginTransaction(); 
    
          User user = new User() { Password = "12345", Username = "jbloggs", Person = new Person() }; 
          user.Person.Firstname = "Joe"; 
          user.Person.Lastname = "Bloggs"; 
          user.Person.User = user; 
    
          repository.Save(user); 
          repository.Save(user.Person); 
         } 
         catch (Exception ex) 
         { 
          MessageBox.Show(ex.ToString()); 
          repository.RollbackTransaction(); 
         } 
        } 
    

回答

1
  1. NHibernate不能自動設置它,你必須自己做。 最常見的是AddSomething()方法在 添加孩子收集和設置 孩子的父親參考。但是,如果您不需要代碼 中的父引用,則可以將其刪除(並僅映射集合)。

  2. 使用集合和引用上可用的Cascade選項。