1

User クラスがあるとしましょう

    public class User
    {
        public User() {
          Created = DateTime.Now;
          Tags = new List<string>();
        }


        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime Created {get;set;}
        public IEnumerable<string> Tags {get; private set;}    
    }

[FirstName]/[LastName] のような ID をユーザーに持たせたい場合は、次のように IdConvention を登録します。

     _documentStore
    .Conventions
    .RegisterIdConvention<User>(
      (dbname, commands, user) => user.FirstName +"/" + user.LastName ));

ここで、新しいタグのセットが添付された新しいユーザーを作成したとします。ユーザーが存在しない場合は、RavenDB に保存します。ただし、ユーザーCreated存在する場合は、最初の日付を保持したいので、既存のオブジェクトを上書きしたくありません。したがってTags、新しく作成されたユーザーの値で列挙を更新するだけです。

あなたは次のようなことをするかもしれません:

public void AddOrUpdateUser(User newUser) {
    using (var session = _documentStore.OpenSession())
                {

                    var existingUser = session.Load<User>("myFirstname/myLastname")
                    if(user != null) {
                     existingUser.Tags = user.Tags;
                    }
                   else {

                     session.Store(newUser);
                   }
                 session.SaveChanges();
                }
}

ただし、何らかの理由で IdConvention を変更した場合は、上記のコードも更新する必要がありました。オブジェクトの ID を計算するために登録された IdConvention を参照する方法はありますかnewUser。この ID 値を使用すると、ID を自分で作成するのではなく、アイテムが存在するかどうかを確認できます。

4

1 に答える 1