EF Core种子数据时Photo表Url字段始终为null的问题求助
问题解决:种子数据导入后Photo的Url字段为null的原因及修复
问题根源
你的Photo类中定义的URL属性名为UrL(最后一个字母是大写L),但种子数据JSON里对应的键是"Url"(最后一个字母是小写l)。由于.NET的JsonSerializer默认区分大小写,反序列化时无法匹配这两个名称,导致Url值无法被正确赋值到实体属性中,最终数据库里该字段为null;而IsMain因为大小写完全匹配,所以能正常赋值。
修复方案(二选一即可)
方案1:修改实体类属性名,与JSON键保持一致
将Photo类中的UrL属性改为Url(统一小写l):
public class Photo { public int Id { get; set; } // 修改此处属性名 public string Url { get; set; } public bool IsMain { get; set; } public string PublicId { get; set; } public AppUser AppUser { get; set; } public int AppUserId { get; set; } }
修改完成后,重新生成迁移并更新数据库:
dotnet ef migrations add FixPhotoUrlPropertyName dotnet ef database update
然后重新执行种子数据导入即可。
方案2:使用特性指定JSON映射关系
如果不想修改实体类属性名,可以通过JsonPropertyName特性强制指定JSON键的匹配规则:
using System.Text.Json.Serialization; [Table("Photos")] public class Photo { public int Id { get; set; } // 添加特性指定JSON键名 [JsonPropertyName("Url")] public string UrL { get; set; } public bool IsMain { get; set; } public string PublicId { get; set; } public AppUser AppUser { get; set; } public int AppUserId { get; set; } }
这种方式不需要修改数据库结构,直接重新运行种子数据导入即可生效。
额外检查
另外注意你的种子数据JSON中Introduction字段的字符串末尾缺少闭合引号,虽然当前不影响Url的问题,但可能导致其他反序列化错误,建议修正:
"Introduction": "Cupidatat do nostrud et culpa commodo enim minim quis.",
内容的提问来源于stack exchange,提问作者3bdallah-Oi
相关产品推荐
相关产品推荐

