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
相关产品推荐
相关产品推荐

