共用方式為


HOW TO:在無法推斷索引鍵的情況下建立實體索引鍵 (Entity Framework)

本主題描述如何在實體資料模型精靈更新模型精靈無法推斷實體索引鍵的情況下,以手動方式編輯 .edmx 檔案來變更實體索引鍵。

使用 [實體資料模型精靈] 或 [更新模型精靈] 產生或更新 .edmx 檔時,實體類型的索引鍵會對應至所對應之資料表的主索引鍵。 如果沒有定義主索引鍵 (例如,在檢視表中),該工具會試著根據資料表或檢視表的資料行推斷唯一的實體索引鍵。 所推斷的索引鍵由所有資料表或檢視表的不可為 null 及非二進位資料行組成。 如果資料表或檢視表只包含可為 null 及二進位資料行,就不會推斷出索引鍵。

如果沒有推斷出實體索引鍵,就不會將該實體加入到模型中。 反之,包含 EntityType 項目的程式碼結構 (不帶有定義的索引鍵),會加入至 .edmx 檔案的 SSDL 區段。

如需實體索引鍵的詳細資訊,請參閱 EntityType Element (CSDL)EntityType Element (SSDL)

在本主題程序中假設您在 Visual Studio 中開啟有效的 .edmx 檔案。

Dd163156.note(zh-tw,VS.100).gif注意:
如同以下程序的建議,如果使用 [更新模型精靈] 來更新模型,就會複寫 .edmx 檔案中 SSDL 區段變更的部分。在此情況下,若要避免手動編輯 .edmx 檔案,則修改資料庫結構描述就可以讓每個資料表有主索引鍵,或讓每個資料表或檢視表的一個或多個資料行是不可為 null 或非二進位。

在無法從資料表推斷索引鍵的情況下加入實體索引鍵

下列程序會套用到對應至資料表的實體類型。 這個程序假設在 XML 編輯器中開啟 .edmx 檔案。

如果 Entity Designer 不能根據資料表的資料行推斷實體索引鍵,就不會將該實體加入至模型中。 反之,包含 EntityType 項目的程式碼結構 (不帶有定義的索引鍵),會加入至 .edmx 檔案的 SSDL 區段。

從資料表無法推斷索引鍵時,加入實體索引鍵

  1. 取消 .edmx 檔案的 SSDL 區段中之註解 EntityType 項目。

  2. 將適當的 Key 項目加入至 EntityType 項目,以定義實體類型的索引鍵。 如需詳細資訊,請參閱 EntityType Element (SSDL)

    Dd163156.note(zh-tw,VS.100).gif注意:
    資料行或用來定義實體索引鍵的資料行必須能夠明確識別資料表中的資料列。

  3. 在 SSDL 區段中,將指定資料表的 EntitySet 項目加入至已加入實體類型的對應。 如需詳細資訊,請參閱 EntitySet Element (EntityContainer SSDL)

  4. 在 CSDL 區段中,加入對應至已加入之 SSDL 實體類型的EntityType 項目。 如需詳細資訊,請參閱 EntityType Element CSDL

  5. 在 C-S (概念至儲存體) 對應區段中,加入在已加入之 SSDL 和 CSDL 實體類型間指定對應的 EntitySetMapping 項目。 如需詳細資訊,請參閱 EntitySetMapping Element (MSL)

從檢視表無法推斷索引鍵時,加入實體索引鍵

下列程序會套用到對應至檢視表的實體類型。 這個程序假設在 XML 編輯器中開啟 .edmx 檔案。

如果 Entity Designer 不能根據檢視表的資料行推斷實體索引鍵,就不會將該實體加入至模型中。 反之,包含 EntityType 項目的程式碼結構 (不帶有定義的索引鍵),會加入至 .edmx 檔案的 SSDL 區段。

從檢視表無法推斷索引鍵時,加入實體索引鍵

  1. 取消 .edmx 檔案的 SSDL 區段中之註解 EntityType 項目。

  2. 將適當的 Key 項目加入至 EntityType 項目,以定義實體類型的索引鍵。 如需詳細資訊,請參閱 EntityType Element (SSDL)

    Dd163156.note(zh-tw,VS.100).gif注意:
    資料行或定義實體索引鍵的資料行必須能夠明確識別檢視表中的資料列。

  3. 將定義的查詢加入至模型。 如需詳細資訊,請參閱 HOW TO:加入定義查詢 (Entity Framework)

另請參閱

概念

.edmx 檔案概觀 (Entity Framework)