2012-11-23 102 views
2

Yeap我在這裏與另一個奇怪的問題:)透明的Redis Dal與serviceStack Redis

我試圖實現透明的Redis數據訪問層。

我會加載N * 1和1 * 1關係懶懶地,N * N和1 * N關係。

public class User 
{ 
    public long CityId {get;set;} 

    [EagerLoading] 
    [IgnoreDataMember] 
    public City {get;set;} 
} 

public class City 
{ 
    public ICollection<long> UserIds {get;set;} 

    [LazyLoading] 
    [IgnoreDataMember] 
    public ICollection<User> Users{get;set;} 
} 

CUD操作(創建,更新,刪除)沒有問題。我可以存儲完整的對象層次。

但我需要非類型的Get方法來檢索對象。

public class GenericRedisRepository 
{ 
    public object Get(string objectUrn) 
    { 
     using (var r = RedisManager.GetReadOnlyClient()) 
     { 
      var pocoObject=r.GetObject(objectUrn); // I COULD NOT FIND THIS METHOD 
      foreach (var property in ReflectionHelper.GetEagerLoadingProperties(pocoObject)) 
      { 
       // Fixup relations and load all EagerLoading properties recursively 
      } 
     } 
    } 
} 

任何想法或另一種方式..

回答

1

對不起,我遲到了。我不知道爲什麼你堅持其屬性而不是不在序列化本質上反序列化方法/:

public class User 
{ 
    public long Id { get; set; } 
} 

public class City 
{ 
    public IEnumerable<long> UserIds { get; set; } 

    public IEnumerable<User> GetUsers() 
    { 
     using (var userData = redis.As<User>()) 
      return userData.GetByIds(UserIds); 
    } 
} 

這樣你就可以通過調用GetUsers()推遲加載的用戶,當你真正需要它們:

var city = redis.As<City>().GetById(id); 
... 
var users = city.GetUsers();