我在我的 DBContext 中使用了 "HasConversion" 来定义一个 JSonArray(Language/Value),并将其保存为 Text 字段已经有一段时间了,它一直很好用。我添加了一个新项目到我的解决方案中,除此之外什么都没改变,但是当我添加 migration 时出现了一个关于 "设置值比较器" 的新错误。
我的模型如下:
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] 实体类型 'Brand' 上的属性 'Name' 是具有值转换器但没有值比较器的集合或枚举类型。设置一个值比较器以确保正确比较集合/枚举元素。
HasConversion
吗?我看到你使用了SetValueComparer
并传递了一个定义好的valueComparer
,但我没有看到它与HasConvertion
接收的转换器有任何关系(OP将其匿名传递)。通常我会使用类似于new ValueConverter<T,U>(a => a.ToU(),b => b.ToT())
的东西。 - Konrad Viltersten