Redis无法保存ef复杂对象

最近项目需要使用redis。

然后我就满怀激情开始处理数据层了。在原来查询数据的基础上,有封装了一个redis缓存层。

结果在redis保存ef对象的时候,发现了一个非常尴尬的问题。


model:

public partial class SYS_User
    {
        public SYS_User()
        {
            this.SYS_UserAccess = new HashSet<SYS_UserAccess>();
        }


        [Key]
        public int UserID { get; set; }
        public Nullable<int> CompanyID { get; set; }
        public string Email { get; set; }

        [ForeignKey("CompanyID")]
        public virtual COM_Company COM_Company { get; set; }
        public virtual ICollection<SYS_UserAccess> SYS_UserAccess { get; set; }
    }

然后使用  

client.Set<SYS_User>("test", user);

结果就失败了。错误是:无限死循环。



然后我又尝试了另一个

model

public partial class COM_HsCode
    {
        [Key]
        public string ID{ get; set; }
        public string Hc_Unit1 { get; set; }
        public string Hc_Unit2 { get; set; }

    }


结果发现,如果不是带有主外键的复杂实体,那么保存是可以成功的


最后无奈之下,是在没有什么好办法(如果大家有好办法,请给我留言!!!)
最终解决方案是,把对象序列化为json,然后保存到redis中。

但是保存前,需要让Json不去序列化主外键关系表(增加[JsonIgnore] 属性)。

public partial class SYS_User
    {
        public SYS_User()
        {
            this.SYS_UserAccess = new HashSet<SYS_UserAccess>();
        }


        [Key]
        public int UserID { get; set; }
        public Nullable<int> CompanyID { get; set; }
        public string Email { get; set; }

            [JsonIgnore]
        [ForeignKey("CompanyID")]
        public virtual COM_Company COM_Company { get; set; }
            [JsonIgnore]
        public virtual ICollection<SYS_UserAccess> SYS_UserAccess { get; set; }
    }

redis:

ELDBEntity ef = new ELDBEntity();
            //获取数据
            var q = ef.Set<SYS_User>().ToList();
            //序列化
            string s = JsonConvert.SerializeObject(q);
            //保存
            client.Set<string>("test", s);
            //redis获取
            var w = client.Get<string>("test");
            //反序列化
            var d = JsonConvert.DeserializeObject<List<SYS_User>>(w);





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值