簡體   English   中英

實體框架4的示例:將POCO映射到EAV數據庫?

[英]Examples for Entity Framework 4: Mapping POCOs to EAV database?

我們的客戶宣傳產品,但產品的屬性彼此差異很大。 產品“類”幾乎和產品一樣多。

最初,我們創建了一個EAV數據庫,我們為每個“類”產品添加和刪除了屬性。 整個過程非常有效,但復雜性令人頭腦麻木。 這是數據庫#1。

我們最終提出了一組共同​​代表所有產品(POCO)的字段,將“額外”字段移動到XML字段“catch all”。 這是數據庫#2。

現在我們有一些客戶使用舊的和一些將使用新的客戶。 我們真的不想更新舊版本,直到我們需要這樣做,但由於EAV結構的原因,我們不時需要更換時間。

問題:

  1. 有關如何編寫EF以將POCO持久保存到EAV數據庫的任何示例(其中您有一個字段名稱表和一個數據表)?
  2. 我們是否應該廢棄數據庫並為所有老客戶編寫“正常”表格,因為我們不時會有變化?

正常當然是指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.

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