2016-12-06 88 views
0

我有兩個型號,在一比一的關係配置:與實體 - 一一對應的關係

public class PointOfInterestModel 
{ 
    [Key] 
    public int Id { get; set; } 

    [Required] 
    public string Name { get; set; } 
    public string Description { get; set; } 

    [Required] 
    public CoordinatesModel Coordinates { get; set; } 

} 

public class CoordinatesModel 
{ 
    [Key] 
    [ForeignKey("PointOfInterest")] 
    public int Id { get; set; } 

    [Required] 
    public float Longitude { get; set; } 

    [Required] 
    public float Latitude { get; set; } 

    public PointOfInterestModel PointOfInterest { get; set; } 
} 

因此,他們應該在一比一的關係存在。 PointOfInterestModel應該只有一個CoordinatesModel,而CoordinatesModel應該只有一個PointOfInterestModel。

現在,我想從我的數據庫中查詢我所有的興趣點,並獲取與他們的所有座標。

以下是我認爲應該工作,但不會:

pointsOfInterestList = db.PointOfInterestModels.Include(x=>x.Coordinates).ToList(); 

那麼,什麼是錯的?它是在關係中,還是在LINQ查詢中?

我一直在試圖解決這個問題好幾個小時。

+0

「應該工作,但不是」 - 發生了什麼?例外,錯誤的數據,沒有? – Dmitry

+0

哦,是的,我得到這個異常:System.Reflection.TargetInvocationException。如果我刪除linq查詢的包含部分,我沒有得到這個異常,但是當然,pointOfInterestModel.coordinates是null。 –

+0

有沒有什麼有趣的「內部」這個異常(有你的表/列的名稱)?你正在使用什麼EF版本? – Dmitry

回答

0

檢查您的數據庫。

我懷疑你會在PointOfInterestModel表中找到額外的CoordinatesModelId字段。

EF無法猜測PointOfInterestModel.CordinatesCoordinatesModel.PointOfInterest的參考號碼相同,並創建新的。

儘量多了一個屬性添加到PointOfInterestModel:書面

[Required] 
[InverseProperty("PointOfInterest")] 
public CoordinatesModel Coordinates { get; set; } 
+0

「PointOfInterestModel」表中沒有'CoordinatesModelId'字段。這也是令我困惑的事情之一,但由於我沒有在移民方面遇到任何錯誤,所以我認爲沒有什麼是錯的。 –

+0

Intresting ...你可以在DB中添加這張表的截圖/腳本嗎?那裏的一切「看起來不錯」? – Dmitry

+0

這是我的數據庫中的[Database Diagram](http://imgur.com/a/okPVY)。我的其他關係看起來很好。在CoordinatesModel表下的「keys」下拉列表中,我可以看到它的外鍵爲'PointOfInterestModel'表,但不是相反。 –

0

我從來沒有見過的關係這樣一個實體,也許重寫外鍵屬性爲了能夠解決您的問題。不要將該屬性添加到Id字段,請嘗試將其添加到虛擬對象。

public class CoordinatesModel 
{ 
    [Key]  
    public int Id { get; set; } 

    [Required] 
    public float Longitude { get; set; } 

    [Required] 
    public float Latitude { get; set; } 

    [ForeignKey("Id")] 
    public virtual PointOfInterestModel PointOfInterest { get; set; } 
} 
+0

[這似乎解決了關係](http://imgur.com/a/D0Bko)。但是當我試圖查詢時我仍然得到異常。 –

+0

我從來沒有使用'include' linq查詢,但大多數語法建議使用引號來尋找你想要的。你可以在這個例子中看到一個例子:http://stackoverflow.com/a/6761246/7257637 –

+0

使用引號方法不起作用。同樣的例外。 –