在 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);
}
}
谢谢。
我有这个模型,你可以在这里看到:
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);
}
}
谢谢。