У меня есть контекст Entity Framework Core с поставщиком CosmosDB и только одна сущность:
public class Entity1
{
public Guid Id { get; set; }
public List<Item> Items { get; set; }
}
вот внутренние объекты сущности:
public class Item
{
public Guid Id { get; set; }
public List<SubItem> SubItems { get; set; }
}
public class SubItem
{
public Guid Id { get; set; }
public string Name { get; set; }
}
Класс Entity1
иметь свойство owned
типа collection Item
, и это имеет другое свойство owned
типа collection SubItem
. Это файл конфигурации для Entity1
:
public class Entity1Configuration : IEntityTypeConfiguration<Entity1>
{
public void Configure(EntityTypeBuilder<Entity1> builder)
{
builder.ToContainer("Entity1");
builder.HasKey(x => x.Id);
builder.OwnsMany(x => x.Items, itemsBuilder =>
{
itemsBuilder.OwnsMany(t => t.SubItems, subitemsBuilder =>
{
subitemsBuilder.HasKey(x => x.Id);
});
});
}
}
Наконец, когда я пытаюсь получить доступ к элементам DbSet<Entity1> Entities1
, я получаю InvalidOperationException
из EF Core:
CosmosDbContext cosmosDbContext = new CosmosDbContext("https://localhost:8081", "myprivatekey", "Dev");
cosmosDbContext.Database.EnsureCreated();
var entities = cosmosDbContext.Entities1.ToList();
Console.WriteLine(entities.Count);
Исключением является следующее:
System.InvalidOperationException : 'При вызове из' VisitLambda 'перезапись узла типа' System.Linq.Expressions.ParameterExpression 'должна возвращатьненулевое значение того же типа. Либо переопределите «VisitLambda» и измените его, чтобы не посещать дочерние элементы этого типа. '
Исключение выдается в строке: var entities = cosmosDbContext.Entities1.ToList();
Если я удаляю свойство SubItems
изкласс Item
все работает ок. Я также попытался изменить поставщика EF на OnMemory, и все работает отлично. Я гуглил это исключение безуспешно. Могу ли я иметь внутренние сущности, такие как мой случай с EF Core и CosmosDB?