使用 EF Core 3.1 查询 Azure Cosmos DB 时未映射的对象属性列表

时间:2021-06-29 13:54:25

标签: c# .net entity-framework asp.net-core azure-cosmosdb

我在使用 ORM Entity Framework Core 3.1 查询 Cosmos DB 时遇到问题

我的情况是这样的:

我有一个类,它有一个 ID 和一个对象列表(为了内部安全,我什至不能显示模型的名称,所以我们将第一个类称为 Items):

public class Model
{
   public Guid DeviceId { get; set; }
   public List<Items> Items { get; set; }
}

Items 类有不同的字段,最后一个字段有一个对象列表:

public class Items
{
    //fields..
    public List<SubItem> SubItems {get; set;}
}

public class SubItem
{
    public int field1 { get; set; }

    public int field2 { get; set; }

    public string field3 { get; set; }

    public string field4 { get; set; }

    public double field5 { get; set; }
}

在我的 CosmosDB 中,我有以下映射特定文档的 json:

{
    "DeviceId": "123456789",
    "Items": [
        {
            //fields...,
            "SubItems": [
                {
                    "field1": 1,
                    "field2": 6,
                    "field3": "blabla",
                    "field4": "blabla",
                    "field5": 100936000
                },
                ...
            ]
        }
    ],
    "id": "blablabla"
}

现在,我已经在我的 ApplicationDbContext 中配置了所有拥有的实体,并且我有一行映射这个“关系”如下:

public class ApplicationDbContext
{
  public DbSet<Model> Models{ get; set; }

  modelBuilder.HasDefaultContainer("Models");
  modelBuilder.Entity<Model>().ToContainer("Models");
  modelBuilder.Entity<Model>().HasKey(lr => lr.DeviceId);

  modelBuilder.Entity<Model>(lr =>
  {
     lr.HasNoDiscriminator();
            
     lr.OwnsMany(o => o.Items, na =>
     {
        na.OwnsMany(o => o.SubItems, na =>
        {
            na.ToJsonProperty("SubItems");
        });
     });
   });
}

然后在我的存储库中,当我想查询数据库以搜索具有设备 ID 的特定设备时,我调用了这个简单的方法:

Model model = await _context.Models.FirstOrDefaultAsync(m => m.DeviceId == deviceID);

现在的问题是,模型内部的所有字段都被映射除了对于 List<SubItems> SubItems 我已经尝试了一切,我的意思是一切,但我总是得到空作为回报。

我做错了什么? 谢谢指教

0 个答案:

没有答案