我被遺留在具有多個視圖和表的遺留數據庫中,並且大部分是正確的外鍵值。然而,這些「外鍵」中的一些不是可空的,所以DBA以他無窮的智慧決定使用「0」而不是空值。不存在的外鍵
在此示例中,如果汽車沒有所有者,CAR中的OWNERID將設置爲0而不是null。 當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 => c.OwnerId> = 0'你能不能用呢? –
謝謝,這是一個好主意,但問題依然存在。 (現在試過)。 – Larsbj
似乎它產生內部加入由領域ownerid。可能你可以在表中添加記錄ID = 0的所有者?並在代碼中稍後檢查。不幸的是,我不知道C#,但可能可以創建左外部連接車輛與所有者 –