从数据库更新EntityFramework模型时映射文件未生成问题
解决Entity Framework 6.1.3更新EDMX时映射类缺失及生成错误的问题
这问题我之前帮朋友排查过类似的,结合你的场景(VS2017 15.9.3 + EF6.1.3),给你几个按优先级排序的解决步骤,一步步试应该能搞定:
清理EDMX缓存与生成文件
有时候VS生成的临时文件或缓存会导致模板生成异常,操作步骤:- 关闭Visual Studio
- 找到
.edmx文件所在的文件夹,删除以下文件(注意先备份重要的代码文件):.edmx.diagram(如果存在)Model.Context.tt和Model.tt生成的所有.cs文件(包括Model.Context.cs、Model.cs、Model.Mapping.cs等)
- 重新打开VS,右键点击
.edmx文件,选择运行自定义工具,让T4模板重新生成所有实体和映射代码
重新从数据库更新模型
如果之前重复添加过表,可能导致EDMX内部元数据冲突:- 打开
.edmx设计器,删除已存在的MyTable实体(如果有的话) - 右键设计器空白处,选择从数据库更新模型
- 在更新向导中,只勾选目标表
MyTable,确保没有重复选择,完成更新操作
- 打开
修复T4模板的自定义工具设置
T4模板的自定义工具配置可能被意外修改:- 在解决方案资源管理器中,分别右键点击
Model.tt和Model.Context.tt,选择属性 - 检查自定义工具字段,确保分别设置为
TextTemplatingFileGenerator - 保存属性设置,然后右键每个tt文件选择运行自定义工具
- 在解决方案资源管理器中,分别右键点击
更新Entity Framework版本
EF6.1.3存在一些已知的生成bug,更新到较新的稳定版本(比如6.4.4)可能解决问题:- 打开NuGet包管理器控制台,执行命令:
Update-Package EntityFramework -Version 6.4.4 - 更新完成后,重新执行从数据库更新模型的操作
- 打开NuGet包管理器控制台,执行命令:
手动添加缺失的映射类(终极方案)
如果以上方法都无效,可以手动创建映射类:
在Model.Mapping.cs中添加以下代码(确保MyTable实体类已正确生成):using System.Data.Entity.ModelConfiguration; public class MyTable_Mapping : EntityTypeConfiguration<MyTable> { public MyTable_Mapping() { // 主键映射 this.HasKey(t => t.Id); this.Property(t => t.Id) .HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity); // 其他属性映射 this.Property(t => t.AccountUserId).IsRequired(); this.Property(t => t.MFAUserId).IsRequired(); this.Property(t => t.LastAuthDate).IsRequired(); this.Property(t => t.CreateDate).IsRequired(); this.Property(t => t.StatusId).IsRequired(); // 关联数据库表 this.ToTable("MyTable"); } }
内容的提问来源于stack exchange,提问作者andrewb
相关产品推荐
相关产品推荐

