У меня есть эта модель, как вы можете видеть здесь:
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()
{
}
}
И внутри этого класса car
у меня есть еще один объект значения с именем CarBody
public class CarBody
{
public VIN VIN { get; set; }
public CarBody(VIN vin)
{
VIN = vin;
}
private CarBody()
{
}
}
И модель ВИН
public class VIN
{
public string value { get; set; }
public VIN(string value)
{
this.value = value;
}
private VIN()
{
}
}
Мне нужно выполнить запрос, используя EFCORE 3.1
на VIN
внутри CarBody
, как вы можете видеть здесь:
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));
}
}
Заранее спасибо.
Money
,CarBrand
,Year
,CarColor
,PlaqueCode
. Исключение их из модели и настройкаCar
иCarBody
в качестве принадлежащих типов сущностей приводит к другому исключению. Не найден подходящий конструктор для типа сущности "Автомобиль". Добавление классаprivate Car() { }
к классуCar
не является исключением, т.е. в обоих случаях проблема не может быть воспроизведена. Предоставьте минимальный воспроизводимый пример. - person Ivan Stoev   schedule 10.05.2020p.Car
— это всего лишьstring
, поэтому любые методы доступа к свойствам внутри не могут быть переведены в SQL. Таким образом, оценка клиента является единственным вариантом. За исключением случаев, когда вы используете SqlServer и каким-то образом используете функциюJSON_VALUE
(здесь заголовок stackoverflow.com/questions/52017204/ вы можете увидеть, как его включить). В целом хранение Json в реляционной базе данных — плохая идея, особенно с учетом отсутствия типа данных Json в EF Core. - person Ivan Stoev   schedule 10.05.2020string vin
на самом деле является vinNumber. Другими словами, выEhsan Akbar
(человек), а ваше имяEhsan Akbar
- вы человек не равное вам имя (если человек == имя). - person mrdnk   schedule 11.05.2020