如何将IdentityUser与自定义类CreatorId关联?避免生成CreatorId1
EF Core 外键映射冲突问题解决
问题描述
实体类定义
public class Comment : FullAuditedEntity<Guid> { public string Text { get; set; } public Guid PostID { get; set; } public IdentityUser Creator { get; set; } }
模型配置代码
builder.Entity<Comment>(b => { b.ToTable("Comments", DatabaseConsts.DbSchema); b.ConfigureByConvention(); b.Property(x => x.Text).IsRequired().HasMaxLength(128); b.Property(x => x.CreatorId).IsRequired(); b.HasOne<IdentityUser>().WithMany().HasForeignKey(x => x.CreatorId).IsRequired().OnDelete(DeleteBehavior.NoAction); b.HasIndex(x => x.CreatorId); });
遇到的问题
执行迁移时出现如下警告,同时生成了额外的CreatorId1列:
外键属性 'Comment.CreatorId1' 在阴影状态下被创建,因为实体类型中存在名为 'CreatorId' 的冲突属性,但该属性未被映射、已用于其他关系,或者与关联的主键类型不兼容。
需求:将FullAuditedEntity自带的CreatorId属性与Creator导航属性正确映射,避免生成多余的CreatorId1列。
解决方法
修改模型配置代码,明确关联导航属性并移除重复配置:
builder.Entity<Comment>(b => { b.ToTable("Comments", DatabaseConsts.DbSchema); b.ConfigureByConvention(); b.Property(x => x.Text).IsRequired().HasMaxLength(128); // 移除重复的CreatorId属性配置,FullAuditedEntity已默认处理 b.HasOne(c => c.Creator) // 明确指定导航属性Creator .WithMany() .HasForeignKey(c => c.CreatorId) // 关联到已存在的CreatorId属性 .IsRequired() .OnDelete(DeleteBehavior.NoAction); b.HasIndex(x => x.CreatorId); });
关键说明
- 原配置中
HasOne<IdentityUser>()未指定导航属性,EF Core无法自动关联到Creator属性,尝试创建新的隐式外键CreatorId1 FullAuditedEntity已经对CreatorId属性完成了基础映射,无需重复调用Property(x => x.CreatorId).IsRequired(),重复配置会导致冲突
内容的提问来源于stack exchange,提问作者Nest
相关产品推荐
相关产品推荐

