NHibernate的2个一对多的持续性

NHibernate的2个一对多的持续性,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,我有下面的代码,它使用存储库模式,由一个流畅的nhibernate自动映射到MySQL数据库作为支持 以下代码段将用户和人员添加到模型中,然后保存到数据库中 它可以工作,但是我必须记住把user.Person.user=user否则,当对象被持久化时,Person将FK userId设置为null 是否有办法自动填充Person.User,或者我需要创建一个方法来完成此操作 是否有办法使与该用户关联的所有对象持久化(例如,仅对一个对象调用repository.Save(obj),并使其他对象也持

我有下面的代码,它使用存储库模式,由一个流畅的nhibernate自动映射到MySQL数据库作为支持

以下代码段将用户和人员添加到模型中,然后保存到数据库中

它可以工作,但是我必须记住把
user.Person.user=user
否则,当对象被持久化时,
Person
将FK userId设置为null

  • 是否有办法自动填充
    Person.User
    ,或者我需要创建一个方法来完成此操作

  • 是否有办法使与该用户关联的所有对象持久化(例如,仅对一个对象调用repository.Save(obj),并使其他对象也持久化。)

  • NHibernate无法自动设置,您必须自己设置。 最常见的是父实体中的
    AddSomething()
    方法 将子对象添加到集合中,并在中设置父对象引用 孩子。但是如果代码中不需要父引用 您可以删除它(并且只映射集合)

  • 使用集合和引用中可用的
    级联
    选项

  •     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();
            }
        }