扩展业务模型并将其存储在数据库中

时间:2010-06-28 13:25:10

标签: sql c#-4.0 business-objects

我有一个关于C#4.0,MS SQL和通过ADO.NET实体数据模型生成的业务对象的(有点一般性)问题。

假设我使用行获取了MS SQL Table Foo:

  • ID uniqueidentifier
  • TITLE nvarchar(20)
  • 说明文字
  • ADDITIONALDATA image

我最初的想法是将自定义数据(扩展属性及其值)序列化为 ADDITIONALDATA 字段。

但现在问题 - 我在哪里可以指定其他属性?在配置文件(即web.config)中?或者是否有其他/标准方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

您能否提供有关您在这里存储的确切内容的更多详细信息?如果您在“ADDITIONALDATA”中有一些序列化对象,那么几乎不可能使用任何其他工具来访问您的数据 - 例如,报告工具。

在大多数情况下,您应该对实际存储在数据库中的内容进行建模。在大多数情况下,属性可以(大致)等同于数据库中的列。这允许您在某种程度上将数据库和应用程序分离。否则,您的应用程序将是唯一知道如何读取数据库的东西。

编辑:

您可以使用实体 - 属性 - 值模型,尽管这种方法存在很多潜在的缺陷。另一种可能性是将数据作为XML存储在列中。同样,这并非没有问题。虽然您至少可以使用SQL的XML函数来搜索XML,但它的性能并不是很好。问题是你正试图为一个没有完全充实的问题提出一个通用的解决方案。你采取的任何方法都会因此而产生问题。如果我不得不选择,我可能会选择EAV模型,就像我讨厌的那样,使用XML紧随其后。

答案 1 :(得分:1)

首先,如果您打算序列化一些数据并将其放在一列(ADDITIONALDATA)中,那么您的设计需要注意的几件事情,列不应该是图像类型。如果你使用XML类型,你将能够存储数据,你可以查询它,虽然查询它会有点痛苦。

正如Tom H.所说,你的设计有一些缺陷。你会发现大多数时候你会看到3个表用于你想要完成的任务。

  1. 存储Foo的表。
  2. 用于存储Foo属性类型的表。 Foo_Att_ID,Foo_Att_Name
  3. 用于存储其他Foo属性类型的值的表。 Foo_ID,Foo_Att_ID,值