簡體   English   中英

實體框架模型和外鍵屬性

[英]Entity Framework model and foreign key property

我有兩個表導入EF模型。
第一個表有一個屬性[section],它充當第二個表的外鍵。 當我將模型中的此屬性映射到表並嘗試編譯時,我收到此錯誤:

從第158,174行開始映射片段中的問題:非主鍵列[部分]在兩個片段中映射到不同的概念側屬性 - 數據不一致是可能的,因為可以獨立地修改相應的概念側屬性。

如果我從它傳遞的模型中刪除此屬性,但當我查詢數據時,我沒有section字段。

我知道我可以通過使用導航字段並從第二個表中讀取此屬性來獲取它,但為了使其工作,我必須在查詢中包含另一個表。

var res  = from name in Context.Table1.Include("Table2")...

為什么我只需要為一個字段包含關聯?

UPDATE
為了更清楚:

表1包含字段:
ItemId - 鍵
部分 - 外鍵
標題

表2包含字段:
SectionId - 鍵
名稱

設置關聯時,必須刪除第一個表中的section屬性。

您的主鍵是什么,是一個存儲生成的? 我懷疑你在某個地方錯過了PK或身份。

提示:出現映射問題時,另一種方法是在EDMX設計器中創建所需的模型,然后讓它為您創建數據庫。 將它創建的內容與您在SQL中創建的內容進行比較,通常很容易發現錯誤。

在EF 4中,您可以使用FK關聯

在EF 1中,從相關表中獲取一個字段的最簡單方法是項目:

var q = from t1 in Context.Table1
        where //...
        select new 
        {
            T1 = t1,
            Section = t1.Section.SectionId
        };
var section = q.First().Section;

如果它是一個關鍵屬性,您可以通過EntityKey獲取值:

var t1 = GetT1();
var section = (int)t1.SectionReference.EntityKey.Values[0].Value;

一般來說,我不喜歡這最后一種方法。 它太特定於EF,如果您的查詢MergeOption設置為NoTrackingNoTracking

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM