Redis无法保存ef复杂对象
2023-09-11 14:21:23 时间
最近项目需要使用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);
相关文章
- redis实战笔记(3)-第3章 Redis命令
- Scrapy-redis 源码分析 及 框架使用
- Redis 服务器
- Redis安装(Windows 最新版本redis 5.0.9,以及redis 4.0)
- Redis——redis的rdb和aof持久化
- redis-(error)-MISCONF。Redis。is。configuredto。save。RDBsnapshots
- Redis-数据结构与对象-对象
- redis安装使用
- 《Redis实战》一第2章 使用Redis构建Web应用
- 《Redis入门指南》一4.6 节省空间
- Redis 错误1067:进程意外终止,Redis不能启动,Redis启动不了
- 【Redis数据结构 序】使用redis-py操作Redis数据库
- Redis缓存Object,List对象
- Redis基础之常用命令说明(二)
- Redis_redis分布式锁-SETNX
- Redis学习---Redis操作之Set
- Redis(1.20)redis慢查询,redis slowlog
- Redis(1.17)redis客户端管理
- 【转】Redis概念原理、redis面试
- Memcached、Redis OR Tair
- 曹工说Redis源码(1)-- redis debug环境搭建,使用clion,达到和调试java一样的效果
- cd src && make all make[1]: 进入目录“/opt/redis/redis-6.2.6/src“ CC Makefile.dep make[1]