有没有一种方法可以在后备字段上应用值转换?

时间:2019-04-09 16:45:14

标签: entity-framework .net-core

问题:在Entity Framework Core 3.0中是否有一种方法可以在backing fields上应用here

上下文: 假设我有一个Blog实体,其中包含代表帖子ID的字符串值列表。我想避免需要一个连接实体/表(如here所述),所以我进行了一次转换以将列表作为字符串存储在数据库中。我也想保护我的模型不被PostIds属性直接修改,所以我想为此使用一个后备字段(如{{3}}所述)。

类似这样的东西:

public class Blog
{
    public int BlogId { get; set; }

    private readonly List<string> _postIds;
    public IReadOnlyCollection<string> PostIds => _postIds;

    public Blog()
    {
        _posts = new List<Post>();
    }
}

上下文的配置看起来像这样:

protected override void OnModelCreating(ModelBuilder modelBuilder)  
{
    // Configuring the backing field
    modelBuilder.Entity<Blog>()
                .Metadata
                .FindNavigation(nameof(Blog.PostIds))
                .SetPropertyAccessMode(PropertyAccessMode.Field);

    // Trying to configure the value conversion, but that doesn't work...
    modelBuilder.Entity<Blog>()
                .Property(e => e.PostIds)
                .HasConversion(v => string.Join(',', v),
                               v => v.Split(','));
}

有什么想法可以使用当前版本的Entity Framework(3.0)实现此配置吗?

0 个答案:

没有答案