You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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额外生成带后缀的列。

具体解决步骤

  1. 检查实体继承关系
    打开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");
    }
    
  2. 排查重复的映射配置
    检查Usuario类的Data Annotation标签,是否有多个属性标记了同一个[Column]名称;同时检查ApplicationDbContext的OnModelCreating方法,是否重复配置了同一列的映射规则。

  3. 清理冗余的DbSet或实体注册
    确认ApplicationDbContext中只注册了一次DbSet<Usuario>,没有同时注册IdentityUser和Usuario导致的冲突。

  4. 验证数据库模型与实体的一致性
    Code First模式下,确保数据库迁移脚本没有生成重复列;Database First模式下,检查EDMX文件是否有重复的属性映射,手动清理冲突条目。


内容的提问来源于stack exchange,提问作者Jaime02

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 19:06:04