在ASP.NET Core 3.1中设置值比较器

问题描述 投票:0回答:1

我在DBContext中使用“ HasConversion”来定义JSonArray(语言/值)并将其另存为Text字段已有很长时间,它的工作原理就像是一种魅力,我向解决方案中添加了一个新项目,但没有任何更改,但是我添加有关“设置值比较器”的迁移时出现新错误。

我的[[模型就像:

public class Brand { public int Id { get; set; } public new IList<LangValue> Name { get; set; } = new List<LangValue>(); }

DBContext

就像: modelBuilder.Entity<Brand>(t => { t.Property(p => p.Name).HasConversion( v => JsonConvert.SerializeObject(v, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Include}), v => JsonConvert.DeserializeObject<IList<LangValue>>(v, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Include}) ); });
它运行良好,但是在添加新项目后,在添加迁移时出现黄色错误,并且模型未添加到新数据库中。

Microsoft.EntityFrameworkCore.Model.Validation [10620]实体类型“品牌”上的属性“名称”是具有值转换器但没有值比较器的集合或枚举类型。设置一个值比较器,以确保正确比较收集/枚举元素。

asp.net-core dbcontext data-conversion jsonconverter entity-framework-core-3.1
1个回答
0
投票
ValueComparer class documentation

为以下类型的CLR类型指定自定义值快照和比较不能与Equals(Object,Object)比较和/或需要拍摄快照时进行深层/结构复制。例如,数组如果要检测到突变,则原始类型将同时需要这两种类型。

快照是将值的副本创建到快照,以便以后可以比较以确定它是否已更改。对于某些类型(例如集合),这需要是集合,而不只是参考的浅表副本。

您可以在此问题上找到有关如何设置ValueComparer的更多信息:

https://github.com/dotnet/efcore/issues/17471

© www.soinside.com 2019 - 2024. All rights reserved.