Web 中的服务堆栈 Redis Api OData 添加 EdmEntityObject / EdmEntityObjectCollection

Service Stack Redis in Web Api OData add EdmEntityObject / EdmEntityObjectCollection

我们能够将普通的 POCO class 添加到服务堆栈 Redis 客户端

IRedisTypedClient<Product> objRedisTypedClientNB = redisClient.As<Product>();
IRedisList<Product> objRedisListNB = objRedisTypedClientNB.Lists["Product"];
Product objNews = new Product(DateTime.Now.Ticks.ToString());
objRedisTypedClientNB.Lists["Product"].Push(objNews);

将产品对象添加到 redis 缓存就可以了

使用动态网络api odata v4 服务时, 元数据是在运行时根据 url

为每个请求创建的

如何将EdmEntityObject / EdmEntityObjectCollection 添加到redis

EdmEntityObject objEntityObject = new EdmEntityObject((EdmEntityType)objEntityType);
objEntityObject.TrySetPropertyValue("Id", "test id");

IRedisTypedClient<EdmEntityObject> objRedisTypedClientEEOC = redisClient.As<EdmEntityObject>();
IRedisList<EdmEntityObject> objRedisListEEOC = objRedisTypedClientEEOC.Lists["EntityName"];

objRedisTypedClientEEOC.Lists["EntityName"].Add(objEntityObject); // throws error 

错误 未知模块中发生 'System.WhosebugException' 类型的未处理异常。

  1. 如何解决错误
  2. 如何将 EdmEntityObject / EdmEntityObjectCollection 的实例添加到 redis 缓存中

注意: 1. 不应使用 POCO classes 2. ODataModel 本身仅在运行时创建

A​​ System.WhosebugException 表示您正在尝试序列化具有循环依赖关系的不可序列化对象,这些对象在任何 ServiceStack 的序列化程序中都不支持(并且在大多数其他序列化程序中也会失败)。

本质上,EF 数据模型具有循环依赖性,这使得它们不适合序列化。相反,您应该让它们映射到可以序列化的干净 DTO,或者使用 OrmLite or Dapper 之类的任何 Micro ORM,将结果集映射到干净的 POCO 模型中。

作为一个目标 OrmLite ensures that all its features (inc. its Reference Support) 映射到清理断开连接的 POCO,因此它们始终是可序列化的,并且可以在服务 DTO 和其他 NoSQL 数据存储中重复使用。