Я застрял в старой базе данных с несколькими представлениями и таблицами, в основном с правильными значениями внешнего ключа. Однако некоторые из этих «внешних ключей» не имеют значения NULL, поэтому DBA в своей бесконечной мудрости решил использовать «0» вместо нуля.Внешние ключи, которые не существуют
В этом примере OWNERID в CAR будет установлен в 0 вместо нуля, если автомобиль не имеет владельца. Когда EF пытается получить все автомобили, будут возвращены только автомобили с действительным OwnerId, а те, у которых 0, остались без внимания.
[Table("CAR")]
public class Car {
[Key, Column("CARID")]
public int CarId { get;set;}
[Column("OWNERID")]
public int OwnerId { get;set;}
[ForeignKey("OwnerId")]
public virtual Owner {get;set;}
}
[Table("OWNER"]
public class Owner {
[Key, Column("OWNERID")]
public int Id {get;set;}
}
Запрос:
var allCars = context.Cars.Include(c => c.Owner).ToList();
Это дает только автомобили с действительной OwnerId (> 0) в ответ. В настоящее время, я «решить» это, делая два запроса, как это:
var carsWithOwner = context.Cars.Include(c => c.Owner).Where(c => c.OwnerId > 0).ToList();
var carsWithoutOwner = context.Cars.Where(c => c.OwnerId == 0).ToList();
Любые указатели или рекомендации, что делать? Я хотел бы получить все автомобили взамен, а с Owner установлен в null, где OwnerId равен 0.
Я не могу изменить базу данных.
'с => c.OwnerId> = 0 'Вы могли бы использовать его? –
Спасибо, это была хорошая идея, но проблема осталась прежней. (Пробовал здесь сейчас). – Larsbj
кажется, что он производит внутреннее соединение с помощью поля ownerid. Может быть, вы можете добавить запись в таблицу Owner с ID = 0? и проверьте его позже в своем коде. к сожалению, я не знаю C#, но может быть возможно создать левое внешнее соединение. Автомобили с владельцем –