複雜型別物件
複雜型別是實體型別的非純量屬性,可在實體內組織純量屬性。 如同實體,複雜型別包含純量屬性或其他複雜型別屬性。 由於複雜型別沒有索引鍵,因此除了父物件以外,複雜型別物件無法由 Entity Framework 管理。 如需詳細資訊,請參閱ComplexType 項目 (CSDL)。
當 Entity Framework 工具產生代表實體類型的物件時,這些物件會繼承自 EntityObject。 同樣地,針對複雜型別產生的物件會繼承自 ComplexObject。 這兩個類別都繼承自 StructuralObject 基底類別 (Base Class)。 複雜型別物件的純量屬性可加以存取,就像其他純量屬性一樣。 如需詳細資訊,請參閱 HOW TO:查詢複雜型別 (Entity Framework)。
當您使用代表複雜型別的物件時,請注意以下幾點:
複雜型別不得包含導覽屬性。
複雜型別屬性不得為 null。 當呼叫 SaveChanges 且遇到 null 複雜物件時,就會發生 InvalidOperationException。 如同實體的純量屬性,Complex 物件的純量屬性可以是 null。
複雜型別無法繼承自其他複雜型別。
在複雜型別的物件圖形內的任何地方變更任何屬性時,父型別的屬性會標示為已變更,而且當呼叫 SaveChanges 時,會更新複雜型別之物件圖形內的所有屬性。
當物件層是由實體資料模型 工具所產生時,複雜物件就會在存取複雜型別屬性時具現化,而且不會在具現化父物件時具現化。
使用包含複雜型別屬性的 POCO (「單純」的 CLR 物件) 型別時,也適用下列考量:
您必須將複雜型別定義為 class。
複雜型別執行個體之成員的變更一律透過快照方法偵測。 如需詳細資訊,請參閱追蹤 POCO 實體中的變更 (Entity Framework)。
下列主題將示範如何使用 ADO.NET 實體資料模型設計工具來達成各種包含複雜型別的工作:
How to: Create and Modify Complex Types
How to: Add a Complex Type Property to an Entity
How to: Refactor Existing Properties into a Complex type Property
How to: Map Complex Type Properties to Table Columns
How to: Map a Function Import to a Complex Type