对于Azure cosmos db或NoSQL来说,我是一个新手。在系统设计中,我有两个实体PrintGroup
和PrintDocument
如下:
class PrintGroup
{
public Guid Id { get; set; }
public string Name { get; set; }
public ICollection<PrintDocument> Documents { get; set; }
}
class PrintDocument
{
public Guid Id { get; set; }
public string DocumentType { get; set; }
public string Name { get; set; }
}
对于我的宇宙容器,我需要保存单个PrintDocument并将其嵌入到PrintGroup文档中。我将EFCore 3.1与cosmos provider一起使用,并且我的配置如下:
public void Configure(EntityTypeBuilder<PrintGroup> builder)
{
builder.HasKey(p => p.Id);
builder.OwnsMany<PrintDocument>(p => p.Documents);
}
但是,当我这样做时,它只会嵌入文档,而不会单独保存打印文档。
我需要打印文档,因为它充当各种客户端的主数据,然后可以针对它们的打印上下文对其进行配置。如果删除builder.OwnsMany<Document>(p => p.Documents);
语句,它将添加单个打印文档,但不将其嵌入打印上下文中,然后我将需要分别获取这些文档。这使我可以选择为PrintDocument
创建单独的实体,这是我要避免的事情。
我阅读了一些有关cosmos db的EFcore实体设计指南,但是提到的示例非常基础,并且没有涉及我的实体模型需要在cosmos db上生成混合数据的情况。
请提出一种实现此目标的方法,或者在我的数据建模方式和实体设计方面可以做一些固有的改变。