是的,所以我知道从 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()
方法中进行设置?
据我所知,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);
});
}
现在应该可以了。