1

两年前,我使用实体框架创建了一个 Web 应用程序。在这个应用程序中,客户跟踪他们为客户所做的项目。

现在他们想要更新应用程序以添加一些新的项目类型。这些新类型将有一些额外的数据需要存储。

所以此时一个项目有一个类型,开始和结束日期,描述,......存储在数据库中。但是现在这些新类型需要一些额外的属性。

扩展当前数据库的最佳方法是什么?

只有当项目是新类型之一时,才会使用这些新属性。现有属性(日期、描述、...)在所有类型之间共享。

使用实体框架时有哪些可能的解决方案?

编辑: 额外的属性将是另一个表的外键。示例:类型 A 的项目将附加一张图片(存储在另一个表中)。

4

1 回答 1

1

基本上,您可以做以下两件事之一:

(1)创建一个新表链接到包含这些新属性的现有表

或者

(2)只需简单地将这些新属性添加到现有表中(在这种情况下,所有属性都必须可以为空,因为它们没有任何现有项目类型的值)

选项 #1是有益的,因为在那个新的额外表中,您可以将这些新列定义为可为空或不可为空(根据您的业务规则的要求)。但不利的一面是,对于那些新的项目类型,您的数据现在被分成两个表,在这些情况下您需要加入这些表以获取所有信息。

根据您使用的 .NET 版本以及所使用的实体框架,您可能会将大部分工作隐藏在将旧项目类型和新项目类型映射到一个或两个表之后(类似于此博客文章中所示) .

选项 #2更快、更明显 - 所有数据仍存储在一个公用表中。但由于旧项目类型没有这些新值,所有新列都必须可以为空——这可能不适合您的业务需求。

于 2013-09-14T12:47:06.243 回答