2008-10-21 94 views
0

我試圖把一些分佈式緩存發揮作用,我使用這indeXus.Net Shared Cache分佈式緩存幫助

它要求被緩存的對象是可序列化的,它在這裏是類對象。

[Serializable] 
public class Members 
{ 
    public Members() 
    {} 

    public Members(string aspnetusername, string aspnetpassword, 
     string emailaddr,string location) 
     : this(0,0,aspnetusername, aspnetpassword,emailaddr,DateTime.Now, location, 
     0,0,DateTime.Now,DateTime.Now,DateTime.Now,false) 
    { } 

    public Members(Int64? row,int memberid, string aspnetusername, string aspnetpassword, 
     string emailaddr,DateTime datecreated, string location, int daimokugoal, int previewimageid, 
     DateTime lastdaimoku, DateTime lastnotifed, DateTime lastactivitydate, bool isactivated) 
    { 
     this.Row = row; 
     this.MemberID = memberid; 
     this.Aspnetusername = aspnetusername; 
     this.Aspnetpassword = aspnetpassword; 
     this.EmailAddr = emailaddr; 
     this.DateCreated = datecreated; 
     this.Location = location; 
     this.DaimokuGoal = daimokugoal; 
     this.PreviewImageID = previewimageid; 
     this.LastDaimoku = lastdaimoku; 
     this.LastNotefied = lastnotifed; 
     this.LastActivityDate = lastactivitydate; 
     this.IsActivated = this.IsActivated; 
     this.Details = new LazyList<MemberDetails>(); 
     this.Blogs = new LazyList<MemberBlogs>(); 
     this.Daimoku = new LazyList<MemberDaimoku>(); 
     this.Determinations = new LazyList<MemberDeterminations>(); 
     this.Encouragements = new LazyList<MemberEncouragements>(); 
     this.Entries = new LazyList<MemberEntries>(); 
     this.Friends = new LazyList<MemberFriends>(); 
     this.Stats = new LazyList<MemberStats>(); 


    } 



    public Int64? Row { get; set; }  
    public int MemberID { get; set; } 
    public string Aspnetusername { get; set; } 
    public string Aspnetpassword { get; set; } 
    public string EmailAddr { get; set; } 
    public DateTime DateCreated { get; set; } 
    public string Location { get; set; } 
    public int DaimokuGoal { get; set; } 
    public int PreviewImageID { get; set; } 
    public DateTime LastDaimoku { get; set; } 
    public DateTime LastNotefied { get; set; } 
    public DateTime LastActivityDate { get; set; } 
    public bool IsActivated { get; set; } 
    public LazyList<MemberDetails> Details { get; set; } 
    public LazyList<MemberBlogs> Blogs { get; set; } 
    public LazyList<MemberDaimoku> Daimoku { get; set; } 
    public LazyList<MemberDeterminations> Determinations { get; set; } 
    public LazyList<MemberEncouragements> Encouragements { get; set; } 
    public LazyList<MemberEntries> Entries { get; set; } 
    public LazyList<MemberFriends> Friends { get; set; } 
    public LazyList<MemberStats> Stats { get; set; } 
} 

LINQtoSql是填充此類的。

public IQueryable<Members> GetMemberInfo() 
     { 
      using (var t = new TransactionScope(TransactionScopeOption.Required, 
        new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted })) 
      { 
       var results = from m in _datacontext.ViewMembers 
          let details = GetMemberDetails(m.MemberID) 
          let determinations = GetMemberDeterminations(m.MemberID) 
          let daimoku = GetMemberDaimoku(m.MemberID) 
          let entries = GetMemberEntries(m.MemberID) 
          let blogs = GetMemberBlogs(m.MemberID) 
          let encouragements = GetMemberEncouragements(m.MemberID) 
          let friends = GetMemberFriends(m.MemberID) 
          let points = GetMemberStats(m.MemberID) 
          select new Members 
          { 
           Row = m.Row, 
           MemberID = m.MemberID, 
           Aspnetusername = m.Aspnetusername, 
           Aspnetpassword = m.Aspnetpassword, 
           EmailAddr = m.EmailAddr, 
           DateCreated = m.DateCreated, 
           Location = m.Location, 
           DaimokuGoal = m.DaimokuGoal, 
           PreviewImageID = m.PreviewImageID, 
           LastDaimoku = m.LastDaimoku.Value, 
           LastNotefied = m.LastNotefied.Value, 
           LastActivityDate = m.LastActivityDate.Value, 
           IsActivated = m.IsActivated, 
           Details = new LazyList<MemberDetails>(details), 
           Determinations = new LazyList<MemberDeterminations>(determinations), 
           Daimoku = new LazyList<MemberDaimoku>(daimoku), 
           Entries = new LazyList<MemberEntries>(entries), 
           Blogs = new LazyList<MemberBlogs>(blogs), 
           Encouragements = new LazyList<MemberEncouragements>(encouragements), 
           Friends = new LazyList<MemberFriends>(friends), 
           Stats = new LazyList<MemberStats>(points) 
          }; 
       return results; 
      } 
     } 

但由於某些原因,我得到這個錯誤

System.Runtime.Serialization.SerializationException:鍵入「System.Data.Linq.DataQuery`1 [DaimokuBeta.MVC.Data.MemberDetails,DaimokuBeta .MVC.Data,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]'in Assembly'System.Data.Linq,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'未標記爲可序列化。

MemberDetails也是可序列化的..不知道它爲什麼認爲它不能序列化 任何想法?

回答

0

我相信這是你的LazyList實現不能被序列化,因爲異常告訴我們泛型類型DataQuery(來自程序集System.Data.Linq)是不可序列化的。這種類型以任何方式連接到您的LazyList?

如果您試圖緩存成員DTO(數據傳輸對象),那麼應用延遲加載可能不是一個好主意,因爲它可能只能在非常難以預料的時刻執行。

緩存通常應用於已加載/計算的數據。否則,使用緩存可能沒有太多意義。

+0

謝謝,LazyList被標記爲可序列化,但顯然它沒有采取。但很好,謝謝你的幫助。 – dswatik 2008-10-21 17:26:59