0

MySQL DBへの流暢なnhibernate自動マッピングに裏打ちされた、リポジトリパターンを使用する次のコードがあります。

次のスニペットは、ユーザーとユーザーをモデルに追加してから、データベースに永続化します。

user.Person.User = user;これは機能しますが、オブジェクトが永続化されている場合Personは、FKuserIdがnullに設定されていることを忘れないでください。

  1. を自動的Person.Userに入力する方法はありますか、それともこれを行うためのメソッドを作成する必要がありますか?

  2. そのユーザーに関連付けられているすべてのオブジェクトを永続化する方法はありますか(たとえば、1つのオブジェクトで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 に答える