实体框架Json列映射

问题描述 投票:0回答:1

是的,所以我知道从 EF7 开始,您可以在不使用值转换器的情况下将 Json 数据存储在列中,但我不太清楚它是如何工作的。所以我有进入数据库的表:

public class ActivityLog 
{
    [Key]
    public Guid Id { get; init; }
    public List<ActivityEntry> Log { get; set; } = new();
}

[NotMapped]
public class ActivityEntry
{
    public string ColumnName { get; set; } = string.Empty;

巴拉巴拉巴拉 }

很明显每个 Log 可以有多个条目。如何在

OnModelCreating()
方法中进行设置?

c# entity-framework entity-framework-core
1个回答
0
投票

据我所知,EF无法将集合直接映射到JSON。有必要引入一个中间类型。

public class ActivityLog
{
    [Key]
    public Guid Id { get; init; }
    public LogMetadata LogMetadata { get; set; } = new();
}
public class LogMetadata
{
    public List<ActivityEntry> Log { get; set; } = new();
}
public class ActivityEntry
{
    public string ColumnName { get; set; } = string.Empty;
    public string ColumnValue { get; set; } = string.Empty;
}

并进行如下配置。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<ActivityLog>().OwnsOne(
        activityLog => activityLog.LogMetadata, ownedNavigationBuilder =>
        {
            ownedNavigationBuilder.ToJson();
            ownedNavigationBuilder.OwnsMany(metadata => metadata.Log);
        });
}

现在应该可以了。

© www.soinside.com 2019 - 2024. All rights reserved.