EF Core 3.0 отображение IEnumerable с личным списком - PullRequest
0 голосов
/ 10 октября 2019

Модель

class Tag
{
    public int Id { get; set; }
    public string Name { get; set;}
    public IEnumerable<TagAttribute> TagAttributes => _tagAttributes.AsReadOnly();
    private List<TagAttribute> tagAttributes;
}

class TagAttribute
{
    public int Id { get; set; }
    public string Value{ get; set;}
    public int  TagId { get; set; }
}

Я следовал документации , чтобы настроить вспомогательное поле

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);           

        // This works
        //var t = modelBuilder.Entity<Tag>().Metadata.FindNavigation(nameof(Tag.TagAttributes));
        //t.SetPropertyAccessMode(PropertyAccessMode.Field);

        // This does not
        modelBuilder.Entity<Tag>()
            .Property(q => q.TagAttributes)
            .HasField("tagAttributes")
            .UsePropertyAccessMode(PropertyAccessMode.Field);
    }

Может кто-нибудь объяснить, в чем отличие этих методов, пожалуйста?

Это ошибка, которую я получаю при использовании 2-го метода для настройки вспомогательного поля ...

System.InvalidOperationException: 'Свойство' Tag.TagAttributes 'имеет тип'IEnumerable ', который не поддерживается текущим поставщиком базы данных. Измените тип CLR свойства или игнорируйте свойство с помощью атрибута [NotMapped] или с помощью EntityTypeBuilder.Ignore в OnModelCreating.

...