在将列添加到数据库后,为什么我的实体框架上下文未更新?

时间:2018-10-16 09:01:41

标签: c# entity-framework

基本上,我已经为EF测试制作了一个简单的应用程序。我添加了DataModel,然后像MSDB教程中所述创建了数据源对象。

DataBinding可以很好地工作,但是当我从sql表中添加或删除列时会出现问题(例如,在SSMS ALTER TABLE xxx ADD yyy varchar(50)中)。

是否可以在没有我的情况下更新/刷新数据模型?我的意思是,我不想运行IDE并单击“从数据库更新模型”,因为用户将大量添加新列。实体框架甚至对这个想法有好处吗?

3 个答案:

答案 0 :(得分:2)

不是因为它没有意义,而且在技术上是不可能的。如何运作? 此更新什么时候发生?数据库是否应该与您的上下文和数据模型建立永久连接,并在架构更改时进行更新?如果您有成千上万的连接会发生什么,然后会发生什么?另外,您是否真的希望数据库模式中的更改会更改您的C#代码?数据库可以更改已编译的代码(dll),还是仅更改源代码?

并且,除了这些技术问题之外,您的数据库模型不是域模型。通常它们相互关联,但并非总是如此。我有一些应用程序,其中c#代码具有的对象少于数据库具有表的对象,并且这些对象不需要数据库中的所有列。

所以,不,这将是完全无法使用或完全错误的。

答案 1 :(得分:1)

在Entity Framework中,您有两种选择。
1.创建数据库并从中生成模型
2.创建模型并从中生成数据库

Entity Framework不能实时执行此操作,最好选择一个要使用的数据库并执行一次,您始终可以删除旧数据库并生成一个新数据库(如果使用选项2),也可以删除模型并生成一个新的(使用选项1时)

选项1称为“数据库优先”方法,这意味着对数据模型的任何更改都在数据库中完成,并且您的模型尚未调整/重新生成
选项2称为“代码优先”方法,这意味着对数据模型的更改是在代码类中完成的,然后迁移到数据库中

答案 2 :(得分:0)

我假设您是根据自己的问题使用“数据库优先”的方式(如果有);看看this link

如果您使用的是“代码优先”方法,请查看migrations