EF Core中Site.operatives集合导航属性使用数组类型报错问题问询
问题根因
报错本质是Entity Framework Core的内置校验规则不允许将数组类型作为集合导航属性,仅支持实现了ICollection<T>接口的类型(如List<T>、HashSet<T>等)。
你之前使用Azure SQL时未触发报错,是因为之前的运行场景下从未触发该导航属性的加载/校验逻辑,切换本地数据库后执行路径变化触发了模型校验,和数据库本身部署环境无关,属于代码中一直存在的隐性问题。
解决方案
根据你的业务场景二选一即可:
场景1:需要EF维护Site和User的导航关联关系
直接修改Site模型的operatives属性类型,替换为可被EF支持的集合类型即可,示例代码如下:
using System.Collections.Generic; public class Site { // 替换为ICollection<User>或者List<User>都可 public ICollection<User> operatives { get; set; } = new List<User>(); }
修改后如果模型结构有变化,按需添加EF迁移更新数据库结构即可。
场景2:operatives属性不需要EF做映射,仅作为自定义返回字段使用
如果你这个operatives是自己从存储过程/表值函数返回结果中自定义填充的字段,不需要EF维护关联关系,直接给该字段添加[NotMapped]注解,告诉EF跳过该属性的映射校验即可:
using System.ComponentModel.DataAnnotations.Schema; public class Site { [NotMapped] public User[] operatives { get; set; } }
该方案不需要修改现有属性类型,也不需要调整EF迁移配置,适合不需要用到导航查询的场景。
内容的提问来源于stack exchange,提问作者Cva
相关产品推荐
相关产品推荐

