0

我有以下使用存储库模式的代码,由流利的 nhibernate 自动映射到 MySQL DB 支持。

下面的代码片段将一个用户和一个人添加到模型中,然后持久化到数据库中。

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

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

1 回答 1

1
  1. NHibernate 不能自动设置这个,你必须自己做。最常见的是AddSomething()父实体中的一种方法,它将子实体添加到集合中并在子实体中设置父引用。但是,如果您不需要代码中的父引用,则可以将其删除(并仅映射集合)。

  2. 使用Cascade集合和参考上可用的选项。

于 2011-08-08T06:11:23.967 回答