将 Entity Framework Core 与 Cosmos Db 结合使用时映射无密钥类型

Mapping keyless type when using Entity Framework Core with Cosmos Db

我有以下 class:

[Keyless]
public class SimpleTimeSpan
{
    public int Days { get; set; }
    public int Hours { get; set; }
    public int Minutes { get; set; }
}

我在这样的实体 class 中使用:

public class MyEntity
{
    public Guid Id { get; set; }
    public string SomeProperty { get; set; }
    public SimpleTimeStapn Cutoff { get; set; }
}

我正在使用 Cosmos db 作为数据库,并且正在使用包 Microsoft.EntityFrameworkCore.Cosmos 5.0.x.

保存到数据库时,我希望得到这样的实体

{
  "Id": "xxxx-yyyy-zzzz",
  "SomeProperty": "my value",
  "Cutoff": {
    "Days": 1,
    "Hours": 5,
    "Minutes": 20
  }
}

为此 属性 我得到这个错误:

InvalidOperationException: Unable to determine the relationship represented by navigation 'MyEntity.Cutoff' of type 'SimpleTimeSpan'

如何映射此 属性?

正如评论部分中提到的 @Danyliv,使用 Owned 实体类型 允许您对只能出现在导航属性中的实体类型进行建模其他实体类型。包含拥有的实体类型的实体是其所有者。

您的 class 将如下所示:

[Owned]
public class SimpleTimeSpan
{
    public int Days { get; set; }
    public int Hours { get; set; }
    public int Minutes { get; set; }
}