在 EFCore 3.1 中显式使用值对象 returns 客户端评估查询 DBcontext

Query on DBcontext using value object returns client evaluation explicitly in EFCore 3.1

我有这个模型,你可以在这里看到:

public  class car
    {
        public int Id { set; get; }
        public string Name { set; get; }
        public CarBody CarBody { get; set; }

        public car( string name, CarBody carBody)
        {

            Name = name;
            CarBody = new CarBody(carBody.VIN);
        }
        private car()
        {

        }
    }

在这个 class car 里面我有另一个值对象 CarBody

   public class CarBody
{
    public VIN VIN { get; set; }

    public CarBody(VIN vin)
    {
        VIN = vin;
    }

    private CarBody()
    {

    }
}

和 VIN 型号

public class VIN
    {
        public string value { get; set; }

        public VIN(string value)
        {
            this.value = value;
        }

        private VIN()
        {

        }
    }

我需要在 CarBody 内的 VIN 上使用 EFCORE 3.1 执行查询,您可以在此处看到:

  public Domain.PetrolReceptions.PetrolReception GetLastOpenNotCanceledByVIN(string vin,
        double openPetrolTestTimeInDays)
    {


        var result = _dbContext.PetrolReceptions.Where(g =>g.Car.carBody.vin == vin ).ToList();

        return result.FirstOrDefault();
    }

但是在执行查询后我得到了这个错误:

The LINQ expression 'DbSet<PetrolReception>
    .Where(p => p.Car.carBody.vin == __vin_0)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.

这里是configEntity配置

 public  class CarConfig : IEntityTypeConfiguration<car>
    {

        public void Configure(EntityTypeBuilder<car> builder)
        {
            builder.Property(c => c.CarBody).HasConversion(c => JsonConvert.SerializeObject(c),
                c => JsonConvert.DeserializeObject<CarBody>(c));

        }
    }

提前致谢。

终于在 EF CORE 3.1 中使用自己的类型,因为我发现 EF CORE 3.1 不支持它。

  public  class CarConfig : IEntityTypeConfiguration<car>
    {

        public void Configure(EntityTypeBuilder<car> builder)
        {
            builder.OwnsOne(c => c.CarBody).OwnsOne(c => c.VIN);

        }
    }

谢谢。