0

我有一个单一的 CosmosDB 容器,我想将更改馈送连接到该容器中。该容器内部存储了一些不同的数据结构,通常会通过数据类型标签进行查询。我想根据更新的对象类型以不同的方式处理更改提要。有没有办法将查询附加到更改提要上,或者我应该尝试将返回数据类型设置为字典或动态?

4

1 回答 1

1

我不知道更改提要处理器库中有任何部分处理或查询。

但是您可以通过将 a 传递JObjectChangesHandler来做到这一点:

var changesHandler = new Container.ChangesHandler<JObject>(async (IReadOnlyCollection<JObject> collection, CancellationToken token) =>
{
   /// First deserialize just to get the type of entity/class
   var typedObject = JsonConvert.DeserializeObject<TypedObject>(doc.ToString());

   if (typedObject.DataType == "yourdatatypetohandle1")
   {
       /// Do sth. with this item
       var entity1 = JsonConvert.DeserializeObject<EntityToHandle1>();
   }
   if (typedObject.DataType == "yourdatatypetohandle2")
   {
       /// Do sth. with this item
       var entity2 = JsonConvert.DeserializeObject<EntityToHandle2>();
   }
}

使用某种模型实体/类:

public class TypedObject 
{
    public virtual string DataType { get; set; }
}

public class EntityToHandle1 : TypedObject 
{
    public override string DataType { get; set; } = "yourdatatypetohandle1";
}

public class EntityToHandle1 : TypedObject 
{
    public override string DataType { get; set; } = "yourdatatypetohandle2";
}

请注意,从性能角度来看,此解决方案并不完美,因为 2x 反序列化不是最佳选择。

于 2021-10-26T20:21:52.937 回答