2014-06-16 54 views
1

我正在使用Microsoft.Web.Redis.RedisSessionStateProvider以及在ASP.NET MVC 5應用程序中在Azure上配置的Redis緩存。如何使用Azure Redis會話狀態提供程序在ASP.NET會話中存儲集合

而我正在討論在控制器中定義的某些動作中將值存儲在Session中。

List<int> items = new List<int>(); 
items.Add(5); 
Session["Items"] = items; 

但是,如果我試圖來存儲我自己的類的集合,它不堅持(後另一個請求,Session["Products"]null):如果我保存的原始值(Session["Foo"]="Bar")或原語的集合,它工作正常:

List<Product> products = new List<Product>(); 
products.Add(db.Find(Id)); 
Session["Products"] = products; 

Product看起來像這樣:

public class Product 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public int CategoryID { get; set; } 
    [ForeignKey("CategoryID")] 
    public Category Category { get; set; } 
    public decimal Price { get; set; } 
    public virtual ICollection<Order> Orders { get; set; } 
} 

我應該怎麼做來存儲研究所這個班的小班在上課?

回答

2

由於Redis是一個鍵值存儲,所以您的對象需要序列化爲一個byte[]流。嘗試用[Serializable]屬性修飾Product類。

請參閱MSDN

+0

我試過了,但沒有幫助。 – lort

+0

試着把你的'新列表();'換成標有'[Serializable]'的另一個類。 – haim770

0

@lort,我想你可能面臨的問題是以下幾點。 使用Redis會話狀態提供程序時,Redis中的會話字典本身就是一個哈希,其中每個會話密鑰值對都是一個哈希字段/值對,只要我知道就可以只將字符串作爲值和非對象(如列表)。正如@ haim770所指出的那樣,您可以將列表轉換爲類似JSON或XML的內容,並將JSON/XML寫爲字符串。當您想使用Session變量(該列表)時,將JSON/XML字符串值轉換回列表。

例如,請參閱下面的內容。我正在使用Microsoft Redis會話狀態提供程序 Microsoft.Web.Redis.RedisSessionStateProvider

JavaScriptSerializer ser = new JavaScriptSerializer(); 
List<Product> products = new List<Product>(); 
products.Add(new Product{Name="test", Description="test"}); 
string productsField = ser.Serialize(products); 
Session["Products"] = productsField; 

在redis-cli窗口中,我可以看到顯示產品列表的會話值。請注意,會話字典是一個Redis哈希,每個「條目」都是一個哈希字段。

redis 127.0.0.1:6379> hgetall /SessionInRedis_nnl24530afhndnchb2f3ronc_Data 
1) "loginTime" 
2) "\x00\x01\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x00\x00\x00\x00\x06\x01 
\x00\x00\x00\x149/25/2014 7:52:03 PM\x0b" 
3) "UserName" 
4) "\x00\x01\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x00\x00\x00\x00\x06\x01 
\x00\x00\x00\x06prasad\x0b" 
5) "Products" 
6) "\x00\x01\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x00\x00\x00\x00\x06\x01 
\x00\x00\x00&[{\"Name\":\"test\",\"Description\":\"test\"}]\x0b" 

希望這有助於(OP或其他人),雖然問題是舊的。

相關問題