我試圖閱讀關於複雜類型的msdn article。但它沒有解釋何時使用它。此外,網絡上還沒有關於複雜類型以及何時使用它們的全面解釋。什麼是實體框架中的複雜類型以及何時使用它?
回答
冗長的解釋是你鏈接的MSDN文章中...所以你基本上要一個簡單的解釋:
複雜類型是一組存在於自己的對象爲C#屬性,但被映射到在已經存在的表(包含它的實體的表)上的列,而不是具有它自己的表(這將需要一個鍵等)。
所以,想象一下你想在數據庫上此表:
Orders
----------
Id (bigint)
Name (varchar)
Street (varchar)
Region (varchar)
Country (varchar)
但希望這種結構在C#實體:
class Order
{
long Id;
string Name;
struct Address
{
string Street;
string Region;
string Country;
}
}
所以有Address
將是一個複雜類型:那就不存在(數據庫上不會有Addresses
表)......它只會作爲Orders
表中的一組列存在。
如@HenkHolterman在評論所指出的,具有由具有其可被用作用於其它含實體的值(在我的示例的單個C#實體複雜類型的值,可以在一個Supplier
實體具有Address
例如,但它只會被映射爲Suppliers
表中的一組列)。它使處理複雜類型的值變得很容易。
其缺點恰恰在於:如果發生在同一個Address
(或任何其他類型的用戶)可以在不同的實體之間共享,您可能不得不在數據庫中多次重複複雜類型值。
您是否選擇使用複雜類型或獨立實體取決於您和您的設計。
你對你的回答的評論沒有意義,看起來像@HenkHolterman已刪除他的評論 – Thomas
考慮這個ContactDetails
類,例如:
public class ContactDetails
{
public string HomePhone { get; set; }
public string MobilePhone { get; set; }
public string FaxNumber { get; set; }
}
默認情況下,EF將把ContactDetails
作爲實體。這意味着,如果(舉例來說)你有一個Person
類ContactDetails
類型的導航性能,EF將映射Person.ContactDetails
關係到不同的表(因爲實體是具有一個身份的東西自己的,因此其他實體可能會提及它 - 並且這將需要關係術語中的不同表格)。
通過表示ContactDetails
作爲複雜類型代替,EF將不再把它作爲一個需要關係的實體,而是將其映射到父(含)實體的相同的表(在我的例子Person
),有效地使其成爲Value Object。
- 1. 實體框架中的複雜類型
- 2. 實體框架 - 重用複雜類型
- 3. 實體框架:存儲複雜類型
- 4. 實體框架EF4複雜類型
- 5. 實體框架5複雜類型
- 6. 實體框架5.0複雜類型
- 7. 實體框架5種複雜類型
- 8. 實體框架嵌套複雜類型
- 9. 實體框架複雜類型最常見的用途是什麼?
- 10. 什麼是對接框架以及何時使用它?
- 11. 在實體框架中使用什麼類型的時間
- 12. 實體框架複雜類型vs創建新實體
- 13. 在MVC實體框架中放置複雜實體類型的正確方法是什麼
- 14. 什麼是實體框架?我們爲什麼使用它?
- 15. 管理實體框架中的複雜類型?
- 16. 從實體框架中的複雜類型檢索值
- 17. 實體框架中複雜類型屬性名稱的別名
- 18. 實體框架中的複雜類型實際上是否繼承?
- 19. 如何獲取實體框架來更新複雜類型?
- 20. 實體框架如何處理複雜類型?
- 21. 這是什麼類型的對象以及如何使用它?
- 22. 什麼是程序的複雜性以及如何計算它?
- 23. 什麼是複雜類型?
- 24. 什麼是使用實體框架6
- 25. 實體框架的複雜類型的列命名約定
- 26. 實體框架中的複雜繼承
- 27. 如何使用Automapper在複雜類型上傳的圖片(MVC +實體框架)
- 28. 填充在實體框架的複雜類型
- 29. 什麼是實體框架
- 30. 實體框架4.1複雜類型在不同模型中的重用
以下內容提供了更多詳細信息,但並未直接回答您的問題 - [EF Code First中的關聯:第2部分 - 複雜類型](http://weblogs.asp。net/manavi/associations-in-ef-4-1-code-first-part-2-complex-types) –
謝謝我會研究它 –