在Ardalis Specification中从CosmosDB返回基类并转为子类的问题
问题:CosmosDB结合Ardalis Specification处理继承实体类型转换
场景与需求
我的CosmosDB集合中存在两个继承自同一基类的实体类型,希望通过Ardalis Specification查询返回基类对象,且这些对象能被转换为对应的具体子类。当前使用CosmosDB SDK,未使用EF。
期望实现的代码示例
class BaseClass { string Id; } class ClassA : BaseClass { string Status; } class ClassB : BaseClass { string Amount; } public class MySpec : Specification<BaseClass> { public MySpec() { Query.Select(x => x is ClassA ? new ClassA { Id = x.Id, Status = x.Status } : new ClassB { Id = x.Id, Amount = x.Amount } ); } }
后续期望执行的操作
var list = _repository.List(new MySpec()); foreach(var item in list) { if(item is ClassA) { // 处理ClassA逻辑 } }
已尝试的方案及问题
- 直接返回基类实例:使用
Query.Select(new BaseClass(){...}),但返回的对象无法转换为对应的子类。 - 尝试EF风格的实体配置:使用
builder.HasBaseType<BaseClass>();,但CosmosDB SDK不支持该配置方式。
内容的提问来源于stack exchange,提问作者Nikita Romashov
相关产品推荐
相关产品推荐

