你可以创建一个 POCO:
public class Tag
{
public string Name { get; set; }
}
那么你的模型类看起来像这样:
public class MyEntity
{
public string Id { get; set; }
public string Name { get; set; }
public List<Tag> Tags { get; set; }
}
指示 EF 如何通过覆盖 OnModelCreating() 或使用单独的配置文件来处理模型:
// Configure the one-to-many/owns many relationship:
builder
.OwnsMany(
ownedType: typeof(Tag),
navigationName: nameof(MyEntity.Tags))
.WithOwner();
这将产生如下内容:
{
"Id": "some-unique-id",
"Name": "The name of the entity",
"Tags": [
{
"Name": "Developer"
},
{
"Name": "Hacker"
},
{
"Name": "Guru"
}
]
}
或者,您可以像这样定义一个简单的转换:
builder.Property(c => c.Tags)
.HasConversion(
v => string.Join(',', v),
v => v.Split(',', StringSplitOptions.RemoveEmptyEntries).ToList()
);
这将允许根据需要查询字符串列表,但在数据库中作为逗号分隔的字符串值保留。虽然这可能没问题,但您会在 Cosmos Db 中失去一些查询能力。
注意:您可能还需要实现一个比较器,以便 EF 正确跟踪更改。