Zac*_*ott 8 c# poco entity-framework-4
我们的客户宣传产品,但产品的属性彼此差异很大.产品"类"几乎和产品一样多.
最初,我们创建了一个EAV数据库,我们为每个"类"产品添加和删除了属性.整个过程非常有效,但复杂性令人头脑麻木. 这是数据库#1.
我们最终提出了一组共同代表所有产品(POCO)的字段,将"额外"字段移动到XML字段"catch all". 这是数据库#2.
现在我们有一些客户使用旧的和一些将使用新的客户.我们真的不想更新旧版本,直到我们需要这样做,但由于EAV结构的原因,我们不时需要更换时间.
问题:
正常当然是指Boyce Codd Normal Form.
我们通过将其结构放入软件,然后映射到存储库中的POCO来处理旧数据库.
mar*_*c_s 10
EAV表通常是一个混乱的业务,Joe Celko(避免销毁的EAV)和许多其他行业专家(例如,你应该避免的五个简单数据库设计错误)正确地警告不要使用EAV结构太多.
除了所有数据库批评者:基于这样的EAV的.NET中的对象怎么样才会看起来像?它可以有任意类型的任何数量的属性,所以基本上,它必须是一个"通用"对象,可以采取任何形状,几乎.
这种想法使我的皮肤爬行并违背了强类型语言的最基本概念 - 是的,你可以在像Ruby和Python这样的动态语言中做这样的事情,但是在C#中?
你唯一可行的选择可能是.NET 4.0中的新"动态"类型和ExpandoObject - 一个可以呈现任何形状的对象,具有任何类型的任何属性,并且基本上可以是你想要的任何类型.
您可以想象SQL Server中的EAV结构与C#4.0中的ExpandoObject之间的映射 - 但我非常怀疑EF团队在这方面做了什么,而且老实说,我认为他们不会很快.但这可能是你探索的可能性.
对于ExpandoObject,请参阅: