.NET 4.8.1 EF自定义用户表登录时出现带1后缀的列名错误
问题原因与解决方法
EF生成带1后缀的列名,本质是实体属性映射冲突——EF无法区分重复的映射关系,自动给冲突的列名加后缀避免命名重复。针对你的场景,常见原因和解决办法如下:
常见触发原因
- 继承IdentityUser时属性重复定义:如果自定义的
Usuario类继承了IdentityUser(或相关Identity基类),基类本身已包含Id、Email(对应你的Correo)这类属性,你又自行定义了IdUsuario、Correo,EF会把基类属性和自定义属性都映射到数据库,冲突后生成IdUsuario1、Correo1这类列名。 - 数据注解/fluent API配置冲突:比如用
[Column("Correo")]标记了一个属性,又在另一个属性或关联配置中重复指定了相同的列名映射,导致EF识别出重复映射。 - 实体关联配置错误:如果
Usuario和其他实体有导航属性,配置关联时误把实体自身的属性当成外键,导致EF额外生成带后缀的列。
具体解决步骤
检查实体继承关系
打开Usuario类,确认是否继承了IdentityUser。如果是,删除重复属性,或通过配置将基类属性映射到自定义列名:protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // 将IdentityUser的Id映射到数据库的IdUsuario列 modelBuilder.Entity<Usuario>() .Property(u => u.Id) .HasColumnName("IdUsuario"); // 将Email映射到Correo列 modelBuilder.Entity<Usuario>() .Property(u => u.Email) .HasColumnName("Correo"); }排查重复的映射配置
检查Usuario类的Data Annotation标签,是否有多个属性标记了同一个[Column]名称;同时检查ApplicationDbContext的OnModelCreating方法,是否重复配置了同一列的映射规则。清理冗余的DbSet或实体注册
确认ApplicationDbContext中只注册了一次DbSet<Usuario>,没有同时注册IdentityUser和Usuario导致的冲突。验证数据库模型与实体的一致性
Code First模式下,确保数据库迁移脚本没有生成重复列;Database First模式下,检查EDMX文件是否有重复的属性映射,手动清理冲突条目。
内容的提问来源于stack exchange,提问作者Jaime02
相关产品推荐
相关产品推荐

