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

EF Core执行migrations add命令时GetProvinces方法报空引用异常

问题根源

你遇到的空引用异常是Province类的Cities集合属性未初始化导致的:
你在初始化Province对象时用了Cities = {"Vancouver",...}这种集合初始化语法,本质是调用Cities属性的Add方法添加元素,但此时Province实例的Cities属性默认值为null,直接调用Add方法就会触发空引用。
你之前做的球队/球员项目未出现该问题,大概率是当时你提前给集合属性做了默认初始化,或是直接给集合属性赋值了新的List实例。

解决方案

1. 给Province类的Cities属性添加默认初始化(推荐)

修改Province类的Cities属性,在定义时直接初始化空集合即可:

public class Province 
{
   [Key]
   [Display (Name="Province Code")]
   [MaxLength(2)]
   public string ProvinceCode { get; set; } 

   [Display (Name="Province Name")]
   [MaxLength(30)]
   public string ProvinceName { get; set; }

   [Display (Name="Cities")]
   // 注意:[MaxLength]仅对字符串、字节数组类型生效,标注在List<string>上无效,建议移除
   public List<string> Cities { get; set; } = new List<string>();
}

2. 替换SampleData中的Cities初始化写法

不想修改实体类定义的话,可以直接在初始化Province时给Cities显式赋值新的List实例:

new Province() {
    ProvinceCode = "BC",
    ProvinceName = "British Columbia",
    Cities = new List<string>{"Vancouver", "Victoria", "Port Coquitlam"}
},

3. 额外映射修正

如果要符合EF关系型数据库的设计规范,建议参考你之前的球队/球员实现,把City单独抽为独立实体类,和Province做一对多关联,避免用字符串集合存储关联数据,后续做增删改查也更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:48:03