如何为modelBuilder添加SetValueComparer解决EF Core 10620校验警告
解决EF Core 10620警告方案
完整实现代码
直接在你现有HasConversion链式调用后追加SetValueComparer配置即可:
modelBuilder.Entity<Routes>().Property(l => l.FI).HasConversion( fi => string.Join(",", fi), dbVal => dbVal.Split(',', StringSplitOptions.RemoveEmptyEntries).ToList() ).SetValueComparer( new ValueComparer<List<string>>( // 相等性判断:对比两个集合的所有元素是否完全一致 (v1, v2) => v1 != null && v2 != null && v1.SequenceEqual(v2), // 哈希值计算:基于集合内所有元素生成哈希 v => v.Aggregate(0, (currentHash, str) => HashCode.Combine(currentHash, str.GetHashCode())), // 快照生成:拷贝集合生成新实例,避免外部修改影响EF内部缓存 v => v.ToList() ) );
可选调整
如果你的业务场景中FI属性的元素顺序不影响语义,可以将相等性判断逻辑替换为哈希集比较,性能更高:
(v1, v2) => v1 != null && v2 != null && new HashSet<string>(v1).SetEquals(v2)
验证
配置完成后重新生成迁移/启动项目,10620警告会自动消失,EF Core可以正确识别集合内元素的变更并执行对应的数据库更新操作。
内容的提问来源于stack exchange,提问作者tj26
相关产品推荐
相关产品推荐

