我在数据库的表中添加了一个新列。该表已在现有的Entity Framework模型中定义。我已经完成了大部分关于如何做到这一点的项目,但它仍然失败了。
有一点背景,这个实体模型至少在3年内没有更新过。所以除了我要添加的列之外,我知道在那段时间里已经添加了许多其他列,但从未包括在内。我大约9个月前接手了这个项目,但从未能成功更新模型。
首次尝试:
结果:
第二次尝试
结果
第三次尝试
结果
第四次尝试
结果
最终尝试
结果
任何可以提供的帮助或方向都会非常受欢迎,因为我处于关键时刻并且必须更新模型。
答案 0 :(得分:19)
数据库"更新模型"使用困难/慢,容易出错。它会生成您可能不想要/不需要的其他内容。因此,手动添加所需的列将更好地工作。 我建议你在VS编辑器之外做,因为根据有多少型号/表,在VS中打开文件可能会非常慢。
1. So in Windows Exlorer,right click on the *.edmx file and open with Notepad (or Notepad++/Textpad).
2. Search for the text <EntityType Name="YourTableNameToAddColumn">.
3. Add the property <Property Name="YourNewColumnName" Type="varchar" MaxLength="64" />
4. Search for the text <MappingFragment StoreEntitySet="YourTableNameToAddColumn">
5. Add mapping to the new column <ScalarProperty Name="YourNewColumnName" ColumnName="YourNewColumnName"/>
6. Save the *.edmx file
答案 1 :(得分:7)
上面的alltej答案的附录,并回答了Chris Walsh的回复,他说'他在元数据工作空间中不存在'概念方成员或属性'xxxxx'作为此MSL的一部分。“在新的Scalar属性行上在'
下您必须确保在.edmx文件中的 TWO 位置搜索“添加属性”,否则您将收到Chris的错误
答案 2 :(得分:1)
找出问题所在。当我生成模型时,我收到错误113:多重性在角色中无效。我没有注意到它在创建失败时生成的其他16307错误中。一旦我确定一切正常。
由于
答案 3 :(得分:1)
1。因此,在Windows Exlorer中,右键单击* .edmx文件,然后使用记事本(或Notepad ++ / Textpad)打开。
2。搜索文本<EntityType Name="YourTableNameToAddColumn">
。
3。添加属性<Property Name="YourNewColumnName" Type="varchar" MaxLength="64" />
。
4。再次搜索文本<EntityType Name="YourTableNameToAddColumn">
,还有第二个文本。
5。向其中添加属性<Property Name="YourNewColumnName" Type="varchar" MaxLength="64" />
。
6。搜索文本<MappingFragment StoreEntitySet="YourTableNameToAddColumn">
。
7。将映射添加到新列<ScalarProperty Name="YourNewColumnName" ColumnName="YourNewColumnName"/>
。
8。保存* .edmx文件
9。之后,更新表public string YourNewColumnName { get; set; }
的edmx模型
答案 4 :(得分:0)
警告:如果您无法删除数据库,请勿执行以下步骤!
我正在使用Visual Code(.net 2)。 以下是我解决它的方法:
首先,删除您的数据库:
dotnet ef database drop
然后,删除所有迁移:
dotnet ef migrations remove
运行相同的命令,直到所有迁移都被删除!
添加您的第一次迁移:
dotnet ef migrations add InitialCreate
运行上面列出的命令后,请确保在生成的新文件中进行更改,可能是在 Data / Migrations 文件中: timestamp + InitialCreate not not not设计文件。
图片示例: Adding new Column
添加匹配后,一切都一致,保存项目并运行以下命令:
dotnet ef database update
如果一切正常,将会创建新列。
答案 5 :(得分:0)
当我向表中添加了一些列,并且我的edmx文件可以很好更新时,我才发现了这个问题。但是,代码生成未正确触发,因此我的.cs文件未更新。我右键单击Entities.tt文件,然后选择“运行自定义工具”,该工具运行文本转换,从而为我修复了该问题。
答案 6 :(得分:0)
我前一段时间遇到了这个问题,能够通过从模型中删除特定表,然后执行“从数据库更新模型”步骤,选择该表来解决该问题。
答案 7 :(得分:0)