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

.NET 5升级至.NET 6后Add-Migration报错:CustomAttributeData需定义主键

问题解决:.NET6升级后Add-Migration报错CustomAttributeData需主键

问题根源

你遇到的问题是EF Core的模型发现机制在.NET6中的行为变化导致的:当CustomFields实体包含Type类型的PropertyType属性时,EF会自动遍历Type类的成员,发现其CustomAttributes属性返回的CustomAttributeData类型,并试图将其纳入实体模型。但CustomAttributeData是系统类型,没有定义主键,因此触发验证错误。

解决方案

提供两种可行的解决方式,按优先级推荐:

1. 配置Type属性的字符串转换(推荐)

将Type类型转换为字符串存储(使用类型的程序集限定名),这样EF不会尝试解析Type的内部导航属性,从根源避免问题。在你的DbContext的OnModelCreating方法中添加配置:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<CustomFields>()
        .Property(f => f.PropertyType)
        .HasConversion(
            type => type.AssemblyQualifiedName,
            typeName => Type.GetType(typeName));
}

这种方式同时解决了EF模型发现问题,还让Type类型的存储更稳定(直接序列化Type可能存在兼容性问题)。

2. 显式忽略CustomAttributeData类型

如果暂时不想修改Type的存储方式,可直接告诉EF不要将CustomAttributeData纳入模型:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Ignore<CustomAttributeData>();
}

验证方式

添加上述配置后,重新执行Add-Migration命令,即可正常生成迁移文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:35:18