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选项。