C# 使用实体框架核心以JSON字符串形式存储和检索数据?
我正在尝试将对象存储为JSON。然后,使用C#将其从JSON字符串转换回实体框架核心3的对象 我有以下两个模型类:C# 使用实体框架核心以JSON字符串形式存储和检索数据?,c#,json,entity-framework,entity-framework-core,entity,C#,Json,Entity Framework,Entity Framework Core,Entity,我正在尝试将对象存储为JSON。然后,使用C#将其从JSON字符串转换回实体框架核心3的对象 我有以下两个模型类: public class A { public int Id { get; set; } // more properties // I want to store the data as json. public CustomObject Object { get; set; } } public class CustomObject
public class A
{
public int Id { get; set; }
// more properties
// I want to store the data as json.
public CustomObject Object { get; set; }
}
public class CustomObject
{
public int? Id { get; set; }
public int[] ItemIds { get; set; }
public string Value { get; set; }
}
然后在我的DbContext
中添加了以下内容
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<A>.Property(x => x.Object).HasConversion(
v => JsonConvert.SerializeObject(v, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }),
v => JsonConvert.DeserializeObject<T>(v, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })
);
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity.Property(x=>x.Object).HasConversion(
v=>JsonConvert.SerializeObject(v,新的JsonSerializerSettings{NullValueHandling=NullValueHandling.Ignore}),
v=>JsonConvert.DeserializeObject(v,新的JsonSerializerSettings{NullValueHandling=NullValueHandling.Ignore})
);
}
但是,当应用程序运行时,我得到以下错误
System.InvalidOperationException:'无法映射属性'Object.ItemId',因为它的类型为'int[],而该类型不是受支持的基元类型或有效的实体类型。显式映射此属性,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.ignore”忽略它
当我尝试在这样的泛型类中设置实体时,就会发生此错误
Repository = context.Set<A>();
Repository=context.Set();
如何正确地将JSON字符串转换为对象,并将对象转换回具有实体框架核心的JSON字符串?问题在于默认情况下EF添加了复杂类型“或这些行周围的内容”。为了忽略它,我添加了以下内容,它成功了
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Ignore<CustomObject>();
// ...
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
基于模型创建(modelBuilder);
Ignore();
// ...
}
问题在于默认情况下,EF添加了复杂类型“或这些行周围的内容”。为了忽略它,我添加了以下内容,它成功了
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Ignore<CustomObject>();
// ...
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
基于模型创建(modelBuilder);
Ignore();
// ...
}
您能包含导致引发异常的语句吗?@devNull我更新了问题以显示在哪里。它发生在调用context.Set()
时。您的上下文中没有一个DbSet
,是吗?我没有。我在DBContextName中列出了DbSet。您是否可以包括导致引发该异常的语句?@devNull我更新了问题以显示在何处。它发生在调用context.Set()
时。您的上下文中没有一个DbSet
,是吗?我没有。我在DbContext中列出了DbSet