Мой проект использует EF Core 3.1 и нацелен на Azure Cosmos в качестве базы данных.
У меня есть такая сущность:
public class MyEntity
{
public IEnumerable<string> Names {get;set;}
... other fields
}
Я бы хотел закончить в документе Cosmos следующим образом:
{
"Names": ["Name1", "Name2"]
}
С существующей сущностью (IEnumerable<string>
) я получаю сообщение об ошибке:
Свойство MyEntity.Names не может быть сопоставлен, потому что он имеет тип IEnumerable, который не является поддерживаемым примитивным типом или допустимым типом сущности.
Если я изменю сущность на:
public class NameEntity
{
public string Name {get;set;}
}
public class MyEntity
{
public IEnumerable<NameEntity> Names {get;set;}
... other fields
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>(e =>
{
e.OwnsMany(p => p.Identifiers);
});
}
Документ будет выглядеть так:
{
"Id": "XXXXXX",
"Names:" [
{},
{}
],
}
Итак, я меняю OnModelCreating:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>(e =>
{
e.OwnsMany(p => p.Identifiers, o=> o.HasKey(k=>k.Name));
});
}
И тогда я получаю:
{
"Names": [
{
"Name": "<string1>",
"Id": "XXXX"
},
{
"Identifier": "<string2>",
"Id": "XXXX"
}
]}
Я также смотрел на преобразователи значений, но я думаю, что это больше для преобразования значений свойств между типами, а не для преобразования сущности в строку.
Любая помощь приветствуется.