两年前,我使用Entity Framework创建了一个Web应用程序。在此应用程序中,客户端跟踪他们为客户执行的项目。
现在他们想要更新应用程序以添加一些新的项目类型。这些新类型将有一些额外的数据存储。
所以此时项目有一个类型,开始和结束日期,描述,......存储在数据库中。但现在这些新类型需要一些额外的属性。
扩展当前数据库的最佳方法是什么?
仅当项目是新类型之一时才会使用这些新属性。现有属性(日期,描述......)在所有类型之间共享。
使用Entity Framework时有哪些可能的解决方案?
修改 额外的属性将是另一个表的外键。 示例:类型A的项目将附加图片(存储在另一个表中)。
答案 0 :(得分:1)
基本上,你可以做以下两件事之一:
(1)创建一个链接到包含这些新属性的现有表的新表
或
(2)只需将这些新属性添加到现有表中(在这种情况下,所有属性都必须为空,因为它们没有现有项目类型的任何值)
选项#1 是有益的,因为在新的额外表中,您可以将这些新列定义为可空或不可空(根据业务规则的要求)。但缺点是,对于那些新项目类型,您的数据现在分成两个表,您需要在这些表中加入以获取所有信息。
根据您使用的.NET版本以及您正在使用的实体框架,您可能隐藏了将旧项目类型和新项目类型映射到一个或两个表后的大部分工作(something like shown in this blog post )。
选项#2 更快,更明显 - 所有数据仍然存储在一个公共表中。但由于旧项目类型没有这些新值,因此所有新列都必须是可空的 - 这可能不适合您的业务需求。