C# 为什么我的实体框架上下文在向数据库添加列后不更新?

C# 为什么我的实体框架上下文在向数据库添加列后不更新?,c#,entity-framework,C#,Entity Framework,基本上,我为EF测试做了一个简单的应用程序。我添加了数据模型,然后创建了数据源对象,就像MSDB教程所说的那样 数据绑定工作正常,但当我从sql表中添加或删除列时(例如,在SSMSaltertable xxx addyyyvarchar(50))会出现问题 是否可以在没有我的情况下更新/刷新数据模型?我的意思是,我不想运行IDE并单击“从数据库更新模型”,因为用户将大量添加新列。实体框架对这个想法有好处吗?我假设您是基于您的问题使用“数据库优先”方法,如果是这样的话;看一看 如果您使用的是“代码

基本上,我为EF测试做了一个简单的应用程序。我添加了数据模型,然后创建了数据源对象,就像MSDB教程所说的那样

数据绑定工作正常,但当我从sql表中添加或删除列时(例如,在SSMS
altertable xxx addyyyvarchar(50)
)会出现问题


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

我假设您是基于您的问题使用“数据库优先”方法,如果是这样的话;看一看


如果您使用的是“代码优先”方法,那么请看一看。

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

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

选项1被称为“数据库优先”方法,这意味着对数据模型的任何更改都是在数据库中完成的,并且您的模型没有被调整/重新生成

选项2被称为“代码优先”方法,这意味着对数据模型的更改在代码类中完成,并迁移到数据库中。事实并非如此,因为这毫无意义,而且在技术上是不可能的。它将如何工作? 这个更新应该什么时候发生?数据库是否应该与您的上下文和数据模型建立永久连接,并在模式更改时进行更新?如果你有数千个连接,会发生什么?另外,您真的希望数据库模式的更改会改变您的c代码吗?数据库可以更改编译代码(dll)还是仅更改源代码

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


因此,不,这将是完全不可用或完全错误的。

请提供更多关于采取什么步骤以及发生什么情况的信息?有错误吗?你也可以在这里阅读,看看你是否做得对:谢谢,它很有效。但问题是,是否可以在不做任何事情的情况下进行更新(在本例中,单击“从数据库更新模型”)?是否可以为我们创建一些上下文,说明您尝试此操作的原因?其他评论中提到的问题是,这有点像是在ORM面前飞行。最后,您希望使用数据库中的任何数据,因此您需要能够预测数据的结构和逻辑,以便在代码中使用它。如果您的回答是用户应该能够改变这一点,那么我可以想象一种不同的方法,用户可以如何添加自己的数据(结构上)更有用。但我们需要更多的背景来形成一个答案,我想:)不,这是不可能的。模型是代码库的一部分。您试图做的是(如果我正确阅读了您的注释)在代码运行时更新模型,这将需要代码替换自己的二进制文件,这是不可能的。即使要将模型提取到另一个解决方案中,也必须动态更新引用。所以,如果我读对了,有一些技术上的困难阻碍了解决方案的实施(这在国际海事组织中并不是真的与环境足迹相关)。我不会说这是不可能的,这与环境足迹这样的ORM的目的正好相反。ORM将表结构映射到可以在代码中使用的具体对象。这使得在代码中使用数据库对象变得容易,因为结构和内容是可预测的。当然,您可以编写自己的数据库逻辑,查询表结构并将其映射到动态对象。但它比现成的ORM要复杂得多,需要做的工作也要多。中间的东西会是一个像兽人一样的小说家。或者,重新考虑让用户更改表的决定。