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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:45:36