【问题标题】:Distributed Caching Help分布式缓存帮助
【发布时间】:2010-09-18 08:54:15
【问题描述】:

我正在尝试使用一些分布式缓存,我正在使用这个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=程序集 'System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 中的 null]]' 未标记为可序列化。

MemberDetails 也是可序列化的..所以不知道为什么它认为它不能被序列化 有什么想法吗?

【问题讨论】:

    标签: linq-to-sql serialization caching


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,LazyList 被标记为可序列化,但显然它没有被占用。但是很好,感谢您的帮助。
    猜你喜欢
    • 2021-07-19
    • 2012-03-15
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 2014-10-26
    • 1970-01-01
    相关资源
    最近更新 更多