繁体   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