分布式缓存帮助

问题描述:

我试图把一些分布式缓存发挥作用,我使用这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也是可序列化的..不知道它为什么认为它不能序列化 任何想法?

我相信这是你的LazyList实现不能被序列化,因为异常告诉我们泛型类型DataQuery(来自程序集System.Data.Linq)是不可序列化的。这种类型以任何方式连接到您的LazyList?

如果您试图缓存成员DTO(数据传输对象),那么应用延迟加载可能不是一个好主意,因为它可能只能在非常难以预料的时刻执行。

缓存通常应用于已加载/计算的数据。否则,使用缓存可能没有太多意义。

+0

谢谢,LazyList被标记为可序列化,但显然它没有采取。但很好,谢谢你的帮助。 – dswatik 2008-10-21 17:26:59