我有一个单一的 CosmosDB 容器,我想将更改馈送连接到该容器中。该容器内部存储了一些不同的数据结构,通常会通过数据类型标签进行查询。我想根据更新的对象类型以不同的方式处理更改提要。有没有办法将查询附加到更改提要上,或者我应该尝试将返回数据类型设置为字典或动态?
问问题
21 次
1 回答
1
我不知道更改提要处理器库中有任何部分处理或查询。
但是您可以通过将 a 传递JObject
给ChangesHandler来做到这一点:
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 回答