2012-09-08 11 views
5

używam ServiceStack i chciałby przechowywać obiekty jako skrótów w Redis i uzyskać dostęp do ich części (pól) IDS bez szeregowania całego obiektu, więc mam pytania:ServiceStack Podmioty Nazwa pola Id

  1. Czy istnieje sposób użycia innej właściwości, a następnie "Id", do oznaczenia pola identyfikacyjnego? I Korzystam z konwencji nazewnictwa, w których pole identyfikatora ma nazwę "class
    name + Id". Tak więc w klasie Użytkownik będzie pole ID użytkownika, w
    Itemclass ItemId i tak dalej.

  2. Czy sposób, aby zaktualizować właściwości, które zostały zmienione w obiekcie bez szeregowania całego obiektu do hash i bez niskim poziomie manipulacje z komendy hash Redis? Na przykład za pomocą jakieś lambda.

 

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

Odpowiedz

5

Tak można zastąpić domyślny używając ModelConfig z:

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

To musi raz przed użyciem RedisClient być skonfigurowane na starcie.

+0

Dziękuję, Demis. Nie widziałem tej funkcji wcześniej. Trochę poprawne użycie: ModelConfig .Id (x => x.UserId); A co z częściowym zapisaniem obiektu? Próbowałem napisać to sam, ale utknąłem w drzewach ekspresji. Problem polega na tym, że jeśli używam drzewek wyrażeń, muszę użyć metody .Compile(), która jest okropnym spowolnieniem wykonywania zapisu. Nie chcę też używać magicznych ciągów nazw właściwości do zapisywania właściwości w haśle ... –

+0

Jeśli to odpowiedział na twoje pierwotne pytanie, zaznacz je jako odpowiedź. Jeśli masz inne pytanie, musisz zadać nowe pytanie. Wyjaśnij, o co prosisz, np. Podaj próbkę kodu, jeśli pomaga opisać to, czego szukasz. – mythz

+0

Odebrano część N1. Część N2 nie została odebrana. Próbka kodu znajduje się w części N2. Co chcę zrobić: pobrać obiekt User z skrótu redis, zmienić właściwość "Name" i zapisać tylko właściwość "Name" w haszowaniu bez serializacji i zapisania całego obiektu User. Mogę to zrobić, ręcznie serializując właściwości na ciągi znaków i używając funkcji mieszania niskiego poziomu, ale po prostu wyglądam na bardziej powszechny i ​​oczywisty sposób, taki jak podany przeze mnie kod. –