EF Core 3.0映射IEnumerable与私有列表

时间:2019-10-10 08:55:15

标签: ef-core-3.0

型号

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; }
}

我已按照documentation配置后备字段

    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);
    }

任何人都可以解释这些方法的区别吗?

这是使用第二种方法配置后备字段时收到的错误...

  

System.InvalidOperationException:'属性'Tag.TagAttributes'为   当前不支持的“ IEnumerable”类型   数据库提供者。更改属性CLR类型或忽略   属性使用'[NotMapped]'属性或通过使用   “ “ OnModelCreating”中的“ EntityTypeBuilder.Ignore”。

0 个答案:

没有答案