我有几个现有的Windows控制台应用程序使用Entity Framework 6.13来访问数据库表。我希望在数据库表中添加一个新列。将新列添加到表的末尾时,现有控制台应用程序是否会失败?我不会更改任何现有的列名称或属性。我不会改变表中列的顺序。我计划将列添加到数据库表的末尾。
我的现有生产控制台应用程序是否会因为更改而使用实体框架模型(访问没有新列的表)失败?
答案 0 :(得分:2)
不,即使您将新列添加到现有数据库表,也不会使现有的控制台应用程序失败。因为,您的控制台应用程序的实体框架配置将不会知道添加到数据库端的新添加的列。
EF Fluent API总是尝试根据您的配置将您的域模型与数据库表进行映射。如果它映射系统将运行没有任何错误。因此,您尚未触及“现有数据库表”列,只是添加了新列。因此,EF Fluent API可以使用控制台应用程序的域模型成功映射现有数据库,并且控制台应用程序可以成功运行。
注意:我假设,新添加的列没有任何约束,如NOT NULL,PRIMARY KEY等,
答案 1 :(得分:0)
这取决于您在应用程序中初始化数据库的方式。 EF对DbContext的初始化进行比较,如果数据库模式与DbContext中的模型不同,则默认情况下会产生错误。您可以使用不同的初始化策略自定义行为。
答案 2 :(得分:0)
如果列没有约束,则向数据库添加列不会导致Entity Framework模型出现任何错误。 EF创建的任何记录都将列设置为null,并且所做的任何更新都不会改变列的值。
请注意,EF不会知道您的列,如果您稍后进行迁移,或者使用dropCreate(模型更改/始终)初始化策略,它可能会丢失。
此外,数据库中列的顺序不会影响实体框架。