Dynamic Web Api OData中的服务堆栈Redis添加EdmEntityObject/EdmEntityObjectCollection
我们能够向服务堆栈Redis客户端添加一个普通的POCO类Dynamic Web Api OData中的服务堆栈Redis添加EdmEntityObject/EdmEntityObjectCollection,dynamic,asp.net-web-api,redis,
servicestack,odata,Dynamic,Asp.net Web Api,Redis,
servicestack,Odata,我们能够向服务堆栈Redis客户端添加一个普通的POCO类 IRedisTypedClient<Product> objRedisTypedClientNB = redisClient.As<Product>(); IRedisList<Product> objRedisListNB = objRedisTypedClientNB.Lists["Product"]; Product objNews = new Product(DateTime.Now.Tick
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);
IRedisTypedClient objRedisTypedClientNB=redisClient.As();
IRedisList objRedisListNB=objRedisTypedClientNB.Lists[“产品”];
Product objNews=新产品(DateTime.Now.Ticks.ToString());
objRedisTypedClientNB.Lists[“产品”].Push(objNews);
将products对象添加到redis缓存很好
使用动态web api odata v4服务时,
在运行时根据url为每个请求创建元数据
如何将EdmentyObject/EdmentyObjectCollection添加到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
EdmEntityObject objEntityObject=新的EdmEntityObject((EdmEntityType)objEntityType);
objEntityObject.TrySetPropertyValue(“Id”、“测试Id”);
IRedisTypedClient OBJREDISTYPEDClienteoc=redisClient.As();
IRedisList OBJREDISLISTEOC=OBJREDISHTYPEDClienteoc.Lists[“EntityName”];
objRedisTypedClientEEOC.Lists[“EntityName”]。添加(objEntityObject);//抛出错误
错误
未知模块中发生“System.StackOverflowException”类型的未处理异常
2.ODataModel本身仅在运行时创建A
系统。StackOverflowException
表示您正试图序列化具有循环依赖关系的不可序列化对象,而这些依赖关系在任何ServiceStack的序列化程序中都不受支持(在大多数其他序列化程序中也会失败)
从本质上讲,EF数据模型具有周期性依赖关系,这使得它们很难进行序列化。相反,您应该让它们映射到可以序列化的干净DTO,或者使用任何类似Micro ORM的方法,或者将结果集映射到干净的POCO模型
作为一个目标,确保其所有功能(包括its)映射到清理断开连接的POCO,以便它们始终可序列化,并可在服务DTO和其他NoSQL数据存储中重复使用 在我们的例子中,这些DTO类不可用。在运行时使用ODataModelBuilder为每个请求生成属性/元数据。1.是否可以将DataTable、DataRow/DataSet添加到redis缓存<代码>数据表dtb=新数据表();RedisClient RedisClient=新RedisClient(主机);redisClient.Set(“key”,dtb)代码>这也会引发StackOverflowException。2.如何在redis缓存中存储此类对象?3.手动将这些对象序列化为JSON/XML字符串并存储在redis缓存中?这是最好的方法吗?@Navaneth DataTable由于同样的原因不能序列化。如果您知道支持它们的序列化程序,可以将它们序列化为字符串,并使用
SetEntry/GetEntry
API缓存序列化的字符串。