为Azure cosmos DB和EF Core设计C#实体

时间:2020-08-05 07:26:39

标签: entity-framework-core azure-cosmosdb azure-cosmosdb-sqlapi ef-core-3.1

对于Azure cosmos db或NoSQL来说,我是一个新手。在系统设计中,我有两个实体PrintGroupPrintDocument如下:

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);
    }

但是,当我这样做时,它只会嵌入文档,而不会单独保存打印文档。 enter image description here 我需要打印文档,因为它充当各种客户端的主数据,然后可以针对它们的打印上下文对其进行配置。如果删除builder.OwnsMany<Document>(p => p.Documents);语句,它将添加单个打印文档,但不将其嵌入打印上下文中,然后我将需要分别获取这些文档。这使我可以选择为PrintDocument创建单独的实体,这是我要避免的事情。

我阅读了一些有关cosmos db的EFcore实体设计指南,但是提到的示例非常基础,并且没有涉及我的实体模型需要在cosmos db上生成混合数据的情况。

请提出一种实现此目标的方法,或者在我的数据建模方式和实体设计方面可以做一些固有的改变。

0 个答案:

没有答案