Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 在Entity Framework 6.0中从数据库更新模型_C#_Entity Framework_Sql Server 2008_Entity Framework 6_Ado.net Entity Data Model - Fatal编程技术网

C# 在Entity Framework 6.0中从数据库更新模型

C# 在Entity Framework 6.0中从数据库更新模型,c#,entity-framework,sql-server-2008,entity-framework-6,ado.net-entity-data-model,C#,Entity Framework,Sql Server 2008,Entity Framework 6,Ado.net Entity Data Model,我正在开发一个Web API服务(在Visual Studio 2013中),并在解决方案中添加了ADO.NET实体数据模型(数据库优先) 我包含的所有表都在edmx图表中正确创建 然后我做了一些更改:在源数据库中添加了两个新列,删除了一个列。因此,当我尝试从数据库更新模型时,会添加两个新列,而删除的列仍在我的模型中,消息如下: 错误11009:未映射属性“Image” 其中,Image是数据库中已删除列的名称 我可以从模型中手动删除此属性吗?或者还有其他更干净、更安全的方法吗?当然,正如其他人

我正在开发一个Web API服务(在Visual Studio 2013中),并在解决方案中添加了ADO.NET实体数据模型(数据库优先)

我包含的所有表都在edmx图表中正确创建

然后我做了一些更改:在源数据库中添加了两个新列,删除了一个列。因此,当我尝试从数据库更新模型时,会添加两个新列,而删除的列仍在我的模型中,消息如下:

错误11009:未映射属性“Image”

其中,
Image
是数据库中已删除列的名称


我可以从模型中手动删除此属性吗?或者还有其他更干净、更安全的方法吗?

当然,正如其他人所说,改变方法可能是使用EF和DB的更好方法,但从您首先需要数据库这一事实出发,我认为使用数据库优先模型有其优点,其中之一(这取决于您第二个问题的答案)如果EDMX按原样处理,这意味着作为生成的代码段,您可以在每次需要或想要时刷新、销毁和重新创建,而不会丢失任何修改

现在,正如我前面所说的,生成代码的性质意味着您对EDMX所做的每一个更改都将丢失,因此请确保您可以删除一个属性,但是模型和数据库并不透明地同步

我认为最好的办法是

  • 更新数据库结构
  • 更新EDMX,如果更新“失败”,即未反映更改,请销毁EDMX,然后重新创建
  • 即使这种方法可能是一种过于简单的方法,也不会首先欺骗数据库的本质


    请注意:首先使用数据库,可以通过使用分部类向DbContext中添加内容和相关实体来添加功能和行为

    我不认为数据库在“从数据库更新”时会首先从概念方案中删除任何内容(即仅从存储方案中删除)。但我找不到引证。我只见过有人手动从概念方案中删除东西,这感觉很奇怪。但在您的情况下,EF会将删除的列视为概念方案中的自定义项,这是违反直觉的,因为它是在存储方案和概念方案之间自动映射的。如果从数据库更新模型失败,请在关系图上选择“全部”,然后删除并从数据库更新模型。。对我有用。@PAVITRA,你的评论应该是可以接受的答案,尽管我可以删除与我的任务相关的特定表,然后在“从数据库更新模型”向导中重新添加。