У меня есть эта проблема:
Тип Vehicle
происходит от типа EntityObject
, который имеет свойство "ID".
Я думаю, я понимаю, почему L2S можетне переводить это на SQL - он не знает, что предложение WHERE должно включать WHERE VehicleId == value
.VehicleId
Кстати, это PK на столе, тогда как свойство в объектной модели, как указано выше, это "ID".
Могу ли я даже выиграть это с деревом выражений?Потому что, кажется, достаточно просто создать Expression
для перехода к методу SingleOrDefault
, но L2S все равно не сможет его перевести?
Я пытаюсь использовать DDD, поэтому я не хочу украшатьобъекты моей доменной модели с ColumnAttributes
и т. д. Однако я рад настроить свой файл L2S dbml и добавить помощников Expression / что угодно в моем «слое данных» в надежде сохранить этот ORM-бизнес вдали от моей доменной модели.
Обновление:
Я не использую синтаксис инициализации объекта в своем операторе select.Вот так:
private IQueryable<Vehicle> Vehicles()
{
return from vehicle in _dc
select new Vehicle() { ID = vehicle.VehicleId };
}
Я на самом деле использую конструктор и из того, что я прочитал , это вызовет вышеуказанную проблему.Вот что я делаю:
private IQueryable<Vehicle> Vehicles()
{
return from vehicle in _dc
select new Vehicle(vehicle.VehicleId);
}
Я понимаю, что L2S не может преобразовать дерево выражений из скриншота выше, потому что он не знает отображений, которые он обычно выводит из синтаксиса инициализации объекта,Как я могу обойти это?Нужно ли создавать Expression
с привязками атрибутов?