在EF Core 3中映射json

用户名

City有商店和公园的清单。我想在SQL Server中将存储对象另存为json。

public class City{
    public int Id { get; set; }
    ... 
    public ICollection<Store> Stores { get; set; }
    public ICollection<Park> Parks { get; set; }

    public City{
        Stores = new List<Store>();
        Parks = new List<Park>();
    }
}

public class Store{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Park{
    public int Id { get; set; }
    public int CityId { get; set; }
    public string Name { get; set; }
}

public class CityConfiguration : IEntityTypeConfiguration<City>
{
    public void Configure(EntityTypeBuilder<City> builder)
    {
        builder.ToTable("Cities");
        builder.HasKey(x => x.Id);

        builder.Property(e => e.Stores).HasConversion(
            v => JsonConvert.SerializeObject(v, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }),
            v => JsonConvert.DeserializeObject<IList<Store>>(v, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }));

        builder.HasMany(e => e.Parks)
            .WithOne(x => x.City)
            .HasForeignKey(f => f.CityId);
    }
}

当在测试数据库上下文中播种数据时,我正在像这样填充Store对象

modelBuilder.Entity<Park>(s =>
{
    s.HasData(new Park{ Name = "Park name", CityId = 1, Id = 1 });
});    

modelBuilder.Entity<Store>(s =>
{
    s.HasData(new Store{ Name = "Store name", Id = 1 });
});

检索数据时

var res = _db.Cities.Where(x => x.Id == id)
                .Include(x => x.Parks)  // this works fine           
                .Include(x => x.Stores) // this issues exception
                .FirstOrDefault();

System.InvalidOperationException:在Include中使用的Lambda表达式无效。

我正在使用.net core 3.1.3

史蒂夫·谢勒

由于您将City.Stores集合另存为JSON序列化字符串,因此无法将其用作子对象的导航集合。您需要摆脱.Include(x => x.Stores)查询语句中的:

var res = _db.Cities.Where(x => x.Id == id)
                .Include(x => x.Parks)  // this works fine           
                .FirstOrDefault();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将列映射到EF Core 3中的子对象

来自分类Dev

EF Core中的IsNumeric

来自分类Dev

EF Core - 实体映射配置

来自分类Dev

从 EF Core 2 迁移到 EF Core 3

来自分类Dev

EF Core中的获取迁移

来自分类Dev

EF Core-两个表中的IdentityUser映射

来自分类Dev

映射API的EF Core列名称

来自分类Dev

EF Core 3 Casting无法翻译

来自分类Dev

EF Core 3 Linq无法翻译

来自分类Dev

EF Core 3 1对0关系问题

来自分类Dev

如何映射两个都附加到EF Core 3中其他单个实体的嵌套实体

来自分类Dev

EF Core RC2中的迁移

来自分类Dev

EF Core 3.0中的存储过程

来自分类Dev

EF Core中的等效SqlFunction.Difference

来自分类Dev

EF Core 3.0中的数据属性继承

来自分类Dev

在EF Core 2.0中配置UseIdentityColumn

来自分类Dev

在Heroku中运行EF Core迁移

来自分类Dev

EF Core 3.1中的TimeSpan问题

来自分类Dev

获取EF Core 3.1中的角色列表

来自分类Dev

在EF Core中添加或更新实体

来自分类Dev

减少和增加EF Core中的列

来自分类Dev

关于EF Core中的“自有”类型

来自分类Dev

.NET / EF Core中的批量插入优化

来自分类Dev

在 EF Core 2.1.1 中配置交集表

来自分类Dev

如何在EF Core 3查询中解析int?

来自分类Dev

在ASP.NET Core WebApplicationFactory中重写EF Core DbContext

来自分类Dev

Net Core Worker Windows服务中的EF Core DBContext

来自分类Dev

.NET Core EF core中对dbcontext的并行调用

来自分类Dev

EF Core流利性映射到内部对象属性