servicestack,odata,Dynamic,Asp.net Web Api,Redis,servicestack,Odata" /> servicestack,odata,Dynamic,Asp.net Web Api,Redis,servicestack,Odata" />

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

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

我们能够向服务堆栈Redis客户端添加一个普通的POCO类

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”类型的未处理异常

  • 如何解决错误
  • 如何将EdmentyObject/EdmentyObjectCollection的实例添加到redis缓存中
  • 注: 1.不应使用POCO类
    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缓存序列化的字符串。