2012-09-08 21 views
5

私はServiceStackを使用し、Redisの中にハッシュとしてオブジェクトを格納し、オブジェクト全体をシリアライズすることなく、IDによって、その部分(フィールド)へのアクセスを取得したいと思いますので、私は疑問を持っている:ServiceStackエンティティIDフィールド名

  1. idフィールドをマークするために、 "Id"という他のプロパティを使用する方法はありますか? I 命名規則を使用しています。ここで、idフィールドの名前は "
    name + Id"のようになります。したがってUserクラスには、
    Itemclass ItemIdなどのUserId IDフィールドがあります。

  2. オブジェクト全体でハッシュにシリアル化せずに、Redisのハッシュコマンドによる操作をせずに、オブジェクト で変更されたプロパティを更新する方法はありますか?たとえば、 ラムダのいくつかの並べ替えを使用して。

 

User user=client.GetById(userId); 
user.Name="New name"; 
client.Update<User>(user,u=>u.Name); 

答えて

5

はいあなたがModelConfigを使用して、デフォルトを上書きすることができます。これは、あなたがRedisClientを使用する前に、起動時に一度設定する必要が

ModelConfig<User>.Id(x => x.UserId); 
ModelConfig<Item>.Id(x => x.ItemId); 

+0

ありがとう、デミス。前にこの機能を見たことがない。 ModelConfig .Id(x => x.UserId);を使用して少し正しい。 オブジェクトの部分保存はどうですか?私は自分でそれを書こうとしましたが、表現木にはまっていました。問題は、式ツリーを使用すると、保存の実行が非常に遅くなる.Compile()メソッドを使用する必要があるということです。また、私は、プロパティを保存するためのプロパティ名のマジック文字列をハッシュに使用したくない... –

+0

これがあなたの元の質問に答えたなら、それを回答とマークしてください。別の質問がある場合は、新しい質問をする必要があります。あなたが探しているものを明確にします。例えば、あなたが探しているものを記述するのに役立つ場合は、コードサンプルを提供します。 – mythz

+0

パートN1に回答しました。パートN2は答えられません。コードのサンプルがパートN2に提供されます。私は何をしたいのですか?RedisハッシュからUserオブジェクトを取得し、 "Name"プロパティを変更し、Userオブジェクト全体をシリアル化して保存せずに、 "Name"プロパティのみをハッシュに保存します。私は手動でプロパティを文字列にシリアル化し、低レベルのハッシュ関数を使ってこれを行うことができますが、私が提供したコードのように一般的で明白な方法を探しています。 –

関連する問題