Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据库中的更新模型正在更新数据库_C#_Sql Server_Entity Framework_Database Schema_Sql View - Fatal编程技术网

C# 数据库中的更新模型正在更新数据库

C# 数据库中的更新模型正在更新数据库,c#,sql-server,entity-framework,database-schema,sql-view,C#,Sql Server,Entity Framework,Database Schema,Sql View,我有一个实体框架.edmx文件,其中一个模型基于Azure上SQL Server实例中的视图。我修改了这个视图,使其包含一个附加列 在SQLServerManagementStudio中,ALTER语句成功,没有发生任何事件。之后,从视图中选择*会按预期显示新列 转到Visual Studio中的解决方案,我打开.edmx文件以显示模型的设计图面。然后我右键单击并选择从数据库更新模型。显示更新向导并切换到刷新选项卡。选项卡上显示了许多视图。这确实包括最近修改的一个 我单击“完成”,几秒钟后向导

我有一个实体框架.edmx文件,其中一个模型基于Azure上SQL Server实例中的视图。我修改了这个视图,使其包含一个附加列

在SQLServerManagementStudio中,
ALTER
语句成功,没有发生任何事件。之后,
从视图中选择*
会按预期显示新列

转到Visual Studio中的解决方案,我打开.edmx文件以显示模型的设计图面。然后我右键单击并选择从数据库更新模型。显示更新向导并切换到刷新选项卡。选项卡上显示了许多视图。这确实包括最近修改的一个

我单击“完成”,几秒钟后向导完成。但是,数据库中的视图不再具有通过运行上面的
SELECT
语句并在设计模式下查看其结构确认的附加字段。意外,但与现在缺少的列一致,我的解决方案在尝试返回相应的
DbSet
时遇到此错误:

System.Data.SqlClient.SqlException:列名无效

我已经阅读了一些相关项目,它们表明
从数据库更新模型功能存在问题和怪癖:

然而,这些都没有提到我所看到的行为。我也认为我的步骤与此一致。它令人钦佩地注明了日期,但除了最终结果外,其他一切似乎都在VS 2017中出现

我的期望是生成的模型应该符合数据库,而不是相反,这是完全错误的吗?我可能错过了一些步骤或设置


更新[2019-06-19]尽管询问此事的评论员重新考虑了这一点,认为这可能是在转移注意力,但为了完整起见,我会提到它。上下文的
OnModelCreating
如下所示(这是默认设置):

模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
抛出新代码FirstException();
}

不,这不应该发生,通常也不会发生。似乎您运行的上下文处于代码优先模式,并且允许自动迁移其数据库。在用于查询视图的上下文中,
OnModelCreating
看起来像什么?再想想,这不会修改视图。这真是可疑。@Gert Arnold你说得对。我用这个工具观察了我自己的ALTER语句以及数据库中的更新模型。视图的反转似乎不是UMFD的一部分。现在正在进行一些其他的事情来找出原因。这是一个大的解决方案。有些项目使用edmx,有些则先使用代码。这可能与将两者混合在同一溶液中有关吗?例如,何时执行全部重建?只有在迁移代码中明确(=手动)包含视图时,“代码优先”才会修改该视图。表可能会被自动修改,视图永远不会被修改。也许您应该在代码库中的任何位置查找视图名称的文本引用。