【问题标题】:Entity Framework v6.13 - Adding new column to tableEntity Framework v6.13 - 向表中添加新列
【发布时间】:2016-06-13 22:46:06
【问题描述】:
我有几个现有的 Windows 控制台应用程序,它们使用 Entity Framework 6.13 来访问数据库表。我希望在数据库表中添加一个新列。将新列添加到表的末尾时,现有的控制台应用程序会失败吗?我不会更改任何现有的列名或属性。我不会更改表中列的顺序。我打算将该列添加到数据库表的末尾。
我现有的使用实体框架模型(访问没有新列的表)的生产控制台应用程序会因为更改而失败吗?
【问题讨论】:
标签:
c#
sql-server
entity-framework
entity-framework-6
【解决方案1】:
不,即使您将新列添加到现有数据库表中,它也不会导致现有控制台应用程序失败。因为,您的控制台应用程序的实体框架配置不会知道添加到数据库端的新添加的列。
EF Fluent API 始终尝试根据您的配置将您的域模型与数据库表进行映射。如果它映射系统将运行没有任何错误。因此,在这里您没有触及现有数据库表列,您只是添加了新列。因此,EF Fluent API 可以成功地将您的现有数据库与控制台应用程序的域模型进行映射,并且控制台应用程序可以成功运行。
注意:我假设新添加的列没有任何约束,如 NOT NULL、PRIMARY KEY 等,
【解决方案2】:
这取决于您如何在应用程序中初始化数据库。 EF 对 DbContext 的初始化进行比较,如果数据库架构与 DbContext 中的模型不同,则默认情况下会产生错误。您可以使用不同的初始化策略自定义行为。
【解决方案3】:
假设列没有约束,向数据库添加列不会导致实体框架模型出现任何错误。 EF 创建的任何记录都会将列设置为 null,并且所做的任何更新都不会改变列的值。
请注意,EF 不会知道您的列,如果您稍后进行迁移,或者使用 dropCreate(on model changed / always) 初始化策略,它可能会丢失。
此外,数据库中列的顺序不会影响实体框架。