[英]Examples for Entity Framework 4: Mapping POCOs to EAV database?
我們的客戶宣傳產品,但產品的屬性彼此差異很大。 產品“類”幾乎和產品一樣多。
最初,我們創建了一個EAV數據庫,我們為每個“類”產品添加和刪除了屬性。 整個過程非常有效,但復雜性令人頭腦麻木。 這是數據庫#1。
我們最終提出了一組共同代表所有產品(POCO)的字段,將“額外”字段移動到XML字段“catch all”。 這是數據庫#2。
現在我們有一些客戶使用舊的和一些將使用新的客戶。 我們真的不想更新舊版本,直到我們需要這樣做,但由於EAV結構的原因,我們不時需要更換時間。
問題:
正常當然是指Boyce Codd Normal Form。
我們通過將其結構放入軟件,然后映射到存儲庫中的POCO來處理舊數據庫。
EAV表通常是一個混亂的業務,Joe Celko( 避免毀滅的EAV )和許多其他行業專家(例如, 你應該避免的五個簡單數據庫設計錯誤 )正確地警告不要使用EAV結構太多。
除了所有數據庫批評者:基於這樣的EAV的.NET中的對象怎么樣才會看起來像? 它可以有任意類型的任何數量的屬性,所以基本上,它必須是一個“通用”對象,可以采取任何形狀,幾乎。
這種想法使我的皮膚爬行並違背了強類型語言的最基本概念 - 是的,你可以在像Ruby和Python這樣的動態語言中做這樣的事情,但是在C#中?
唯一可行的選項可能是.NET 4.0中的新“動態”類型和ExpandoObject - 一個可以呈現任何形狀的對象,具有任何類型的任何屬性,並且基本上是您想要的任何屬性。
您可以想象SQL Server中的EAV結構與C#4.0中的ExpandoObject之間的映射 - 但我非常懷疑EF團隊在這方面做了什么,而且老實說,我認為他們不會很快。 但這可能是你探索的可能性。
對於ExpandoObject,請參閱:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.