Исключение составляют собственные коллекции с EF Core и поставщиком CosmosDB - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть контекст 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?

1 Ответ

1 голос
/ 11 ноября 2019

Ссылаясь на Перевод Lambda в SqlTranslator вызывает исключение , это ошибка, которая была исправлена ​​в более новом пакете EntityFrameworkCore.

Пожалуйста, обновите до последней версии, например: 3.1.0-preview2.19525.5. Я проверил на моей стороне, и проблема была исправлена.

...