Устойчивость 2 один ко многим с NHibernate - PullRequest
0 голосов
/ 08 августа 2011

У меня есть следующий код, который использует шаблон репозитория, подкрепленный беглым автоматическим преобразованием nhibernate в базу данных MySQL.

Следующий фрагмент добавляет пользователя и человека в модель, а затем сохраняется в базе данных.

Это работает, однако я должен не забыть поставить user.Person.User = user;, в противном случае, когда объект сохраняется, Person имеет идентификатор пользователя FK, установленный на ноль.

  1. Есть ли способ автоматически вызвать заполнение Person.User или мне нужно создать метод для этого?

  2. Есть ли способ заставить все объекты, связанные с этим пользователем, сохраняться (например, вызывать только хранилище. Сохраните (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 голос
/ 08 августа 2011
  1. NHibernate не может установить это автоматически, вы должны сделать это самостоятельно. Наиболее распространенным является метод AddSomething() в родительском объекте, который добавляет дочерний элемент в коллекцию и устанавливает родительскую ссылку в ребенок. Но если вам не нужна родительская ссылка в вашем коде Вы можете просто удалить его (и отобразить только коллекцию).

  2. Используйте опции Cascade, доступные для коллекций и ссылок.

...