【问题标题】:adding SetValueComparer to modelBuilder将 SetValueComparer 添加到模型构建器
【发布时间】:2022-01-01 12:15:45
【问题描述】:

只是想知道如何才能摆脱这个警告:

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

代码:

   modelBuilder.Entity<Routes>().Property(l => l.FI).HasConversion(
                    FI=> String.Join(",", FI),
                    dbVal => dbVal.Split(',', StringSplitOptions.RemoveEmptyEntries).ToList()
                );

其中 FI 在模型中定义为:

public List<string> FI { get; set; }

我知道我必须以某种方式调用 SetValueComparer,但我不确定如何。网上的例子有点不同,没有 String.Join 和 dbVal 行。

谢谢

【问题讨论】:

    标签: asp.net-mvc razor


    【解决方案1】:

    来自Microsoft docs - 这是一个如何设置值比较器的示例(在HasConversion() 内部):

    modelBuilder
        .Entity<EntityType>()
        .Property(e => e.MyListProperty)
        .HasConversion(
            v => JsonSerializer.Serialize(v, (JsonSerializerOptions)null),
            v => JsonSerializer.Deserialize<List<int>>(v, (JsonSerializerOptions)null),
            new ValueComparer<List<int>>(
                (c1, c2) => c1.SequenceEqual(c2),
                c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())),
                c => c.ToList()
            )
        );
    

    您当然需要选择合适的值比较(例如List&lt;string&gt; 而不是List&lt;int&gt;)。

    【讨论】:

      猜你喜欢
      • 2019-08-14
      • 2014-11-10
      • 1970-01-01
      • 2013-01-29
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多