2012-09-08 31 views
5

我用ServiceStack並想存儲對象在Redis的哈希值,並得到他們的零件(領域)的ID的訪問,而序列化整個對象,所以我有一個問題:ServiceStack實體標識字段名

  1. 有沒有辦法使用其他屬性,然後「ID」,標記ID字段? I am使用命名約定,其中id字段被命名爲「class
    name + Id」​​。所以在User類中會有UserId id字段,在
    Itemclass ItemId等等。

  2. 是A沒有序列化整個對象爲哈希和不低的水平 操作與Redis的哈希命令更新是在對象 改變的屬性呢?例如,通過使用 某種lambda表達式。

 

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

回答

5

是的,你可以使用ModelConfig與覆蓋默認:

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

這需要您使用RedisClient之前啓動一次配置。

+0

謝謝,德米斯。之前沒有看過這個功能。有一點正確的使用:ModelConfig .Id(x => x.UserId); 而部分保存對象又如何?我試圖自己寫,但卡在表情樹中。問題是,如果我使用表達式樹,我不得不使用.Compile()方法,這是非常糟糕的減慢執行保存。此外,我不想使用屬性名稱的魔術字符串來保存屬性散列... –

+0

如果這回答了您的原始問題,請將其標記爲已回答。如果您有其他問題,則需要提出一個新問題。明確你的要求,例如提供代碼樣本,如果它有助於描述你要找的東西。 – mythz

+0

已回答N1部分。 N2部分未回答。代碼示例在部分N2中提供。我想要做的是:從redis散列中獲取User對象,更改「Name」屬性並僅將「Name」屬性保存到散列中,而不序列化並保存整個User對象。我可以通過手動將屬性序列化爲字符串並使用低級別的哈希函數來完成此操作,但只是尋找像我提供的代碼一樣更常見和更明顯的方法。 –