使用NHibernate持久化2对1

时间:2011-08-08 05:54:51

标签: nhibernate fluent-nhibernate fluent-nhibernate-mapping

我有以下代码使用存储库模式,由流畅的nhibernate自动化支持到MySQL数据库。

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

它有效,但是我必须记住在保持对象时放置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();
            }
        }
    

1 个答案:

答案 0 :(得分:1)

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

  2. 使用馆藏和参考资料上提供的Cascade选项。