建模大(50~)个属性的策略

时间:2011-03-17 02:36:22

标签: c# nhibernate

方案

我正在解析电子邮件并使用ORM(确切地说是NHibernate)将它们插入数据库。虽然我目前的方法在技术上有效,但我不是很喜欢它,但不能提供更好的解决方案。该电子邮件包含50个字段,并从第三方发送,看起来像这样(显然是一个非常短的虚拟样本)。

Field #1: Value 1       Field #2: Value 2
Field #3: Value 3       Field #4: Value 4       Field #5: Value 5

问题

我的问题是,通过解析这么多字段,数据库表是一个绝对的怪物。我无法使用AFAIK创建任何类型的关系模型,因为发送的每封电子邮件都是静态数据,不依赖任何其他来源。

我唯一的想法是找到每个字段之间的共性,并将它们分成更易于管理的块。每个实体说10~字段,总共5个实体。然而,我并非非常喜欢这个想法,因为我所做的就是建立一对一的关系。

管理大量无法控制的属性的好方法是什么?

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

创建2个表:1表示主对象,另一个表示字段。这样,您可以根据需要以编程方式访问每个字段,并且对象模型看起来并不令人讨厌。

但这只是我的头脑;你有一个奇怪的问题。

如果数据返回到您可以轻松解析的文件中,那么您可以创建一个命令行应用程序,该应用程序将生成脚本和c#,然后您可以执行并复制,粘贴到您的程序中。从html页面(Like this one I had to do recently

创建表格中的属性时,我已经这样做了

答案 1 :(得分:5)

如果50个属性实际上是关于这个实体的唯一且离散的数据,我没有看到在一个对象上具有这50个属性(即使听起来很多)的问题。例如,Type类具有大量与其数据相关的布尔属性(IsPublic等)。

备选方案:

嗯,立即想到的一个选项是使用动态对象并覆盖TryGetMember来查找“属性”名称作为键值对字典中的键(其中存在50个键值对的实际设置)。当然,弄清楚如何将你的ORM映射到你的实体是另一个问题,你会失去智能感知支持。

然而,只是把想法扔到那里。

答案 2 :(得分:2)

使用字典而不是单独的字段。在数据库中,您只有一个表格,用于表示字段名称及其值(以及它所属的对象)。