我有几个列,我从Int更改为BigInt。
我打开了我的EF模型,并从数据库中做了一个更新模型'并期望看到这些列现在是Int64s。但他们仍然是Int32s。
(为了确定,我跑了好几次。)
我仔细检查了我的数据库,列绝对是BigInts。
所以...确实从数据库更新模型'不适用于更改数据类型?是否需要手动应用?
答案 0 :(得分:42)
不幸的是,您需要从模型中删除这些项目,然后重新添加它们 - 至少这是我唯一能够实现的功能。
至少有一个第三方工具可以帮助解决这个问题,但尚未亲自尝试过。
答案 1 :(得分:7)
我正在使用VS2008 SP1。如果更改edmx的“ModelView”(CSDL)中的数据类型,则会发生错误,因为“DatabaseModel”(SSDL)未更新。您必须手动编辑* .edmx(XML)。这并不像听起来那么难。您只需搜索VS提供的“错误列表”属性(在文件中搜索可能是最佳解决方案)。转到显示错误数据类型的行并修复它。
e.g。你在数据库上将float更改为nvarchar(50) - >转到您的模型并将Double更改为String - >验证 - >错误.... - >搜索酒店并进行以下更改:
<Property Name="YourChangedProperty" Type="float" />
到
<Property Name="YourChangedProperty" Type="nvarchar" MaxLength="50" />
如果您确切知道数据库中的更改内容,则此方法非常有效。如果您进行了无数次更改,则必须使用某些DB比较工具分析更改或重新生成整个模型。
不是很好。但它“有效”。
小心 中号答案 2 :(得分:4)
正确 - 数据类型似乎不会自动更新。您只需使用“属性”窗口更改模型视图中的数据类型,然后将“类型”更改为“Int64”。
答案 3 :(得分:4)
对于您提到的特定方案,您需要手动将Type从Int32更改为Int64。
有很多方法可以做到这一点,但最简单的方法可能就是打开模型(使用默认编辑器)并将属性类型从Int32更改为Int64。
ADO.NET实体数据模型设计器(实体设计器)使用“更新模型向导”从对数据库所做的更改中更新.edmx文件。更新模型向导将覆盖存储模型,作为此过程的一部分。更新模型向导还对概念模型和映射进行了一些更改,但只有在将对象添加到数据库时才会进行这些更改。例如,将表添加到数据库时,新的实体类型将添加到概念模型中,而将列添加到表中时,新属性将添加到实体类型中。有关对.edmx文件所做更改的详细信息,请参阅Changes Made to an .edmx File by the Update Model Wizard。
对于您的方案,需要注意的重要一点是更新模型向导正在使用您的更改更新.edmx文件,但仅更新存储模型。对现有列的定义进行更改时,概念模型不会更新。有关更新模型向导所做更改的完整说明,请参阅上面的“通过更新模型向导对.edmx文件所做的更改”链接。
答案 4 :(得分:2)
您需要删除您的EF模型,然后重新创建并运行。
答案 5 :(得分:0)
这可能是一个比较老的问题,但是由于问题没有改变,因此今天最确定的问题仍然是相关的。因此,我想提供迄今为止对该问题进行的研究的概要,包括我自己的一些观察结果:
根据timb的答案,基于Microsoft主题文档的注释,这种更新现有数据类型的失败是设计使然。 (请注意,Microsoft似乎已移动或清除了链接的文档,并且当前文档未涉及此问题,但是在存档文档的其他地方仍可以找到措辞相似的注释。Reference。)“从数据库更新模型。 ..“向导不会更新这些更改,而是将解决问题的责任推给了开发人员,以避免进行不正确的自动更改,这些更改从理论上讲可能会以开发人员不希望的方式破坏模型。>
因此,实际上只有两种方法可以解决此问题,而无需借助第三方工具:
从模型中删除受影响的表,然后使用“从数据库中更新模型...”向导重新添加它们,如E.J.的回答所述。布伦南。这种方法的潜在缺点是,它不一定总能成功,特别是如果原始模型是使用Entity Framework的先前版本生成的,则有时可能迫使开发人员执行比完成该版本所需的更多工作。任务。
通过在图形模型查看器中手动调整受影响的字段,方法是右键单击表中的字段,然后从上下文菜单中选择“属性...”。 注意::不要从代码窗口直接对Model .cs文件进行手动更改,因为下次“从数据库更新模型”时,这些更改将被还原。 ”向导运行;如果更改是通过图形模型查看器执行的,则这些更改将持续存在,而不是重新运行向导。
答案 6 :(得分:0)
此外,如果您在Windows上使用MySQL,则重新创建模型可能也无济于事。模式以某种方式缓存在MySQL中。因此,即使重新创建后仍未更新模型,请确保重新启动MySQL服务和VS。之后,该模型应成功更新。
答案 7 :(得分:0)
我通过使用文本编辑器修改.EDMX文件来解决此问题。 找到您的值并更改其类型。然后更正错误类型,将其显示在调试器中。