Ef core valuecomprerer не работает, как и ожидалосьC#

Место общения программистов C#
Ответить
Anonymous
 Ef core valuecomprerer не работает, как и ожидалось

Сообщение Anonymous »

Я пытаюсь настроить конверттер значений для свойства iReadonlySet -typedpublic class StringSetDbConverter()
: ValueConverter(
convertToProviderExpression: appValue =>
ConvertToProviderCallback(appValue),
convertFromProviderExpression: dbValue =>
ConvertFromProviderCallback(dbValue))
{
private static List ConvertToProviderCallback(
IReadOnlySet values) =>
[.. values];

private static IReadOnlySet ConvertFromProviderCallback(
List values) =>
values.ToImmutableHashSet();

public class ValueComparer() : ValueComparer(
equalsExpression: (x, y) =>
x != null && y != null ? x.SetEquals(y) : x == y,
hashCodeExpression: set =>
set.Aggregate(0, (x, y) => HashCode.Combine(x, y)),
snapshotExpression: set => set.ToHashSet())
{
}
}
< /code>
Вот как я настраиваю его в модели: < /p>
area.Property(area => area.Aliases)
.HasConversion(new StringSetDbConverter())
.IsRequired(false)
.Metadata.SetValueComparer(new StringSetDbConverter.ValueComparer());

У меня есть семенные данные для этой сущности, и каждый раз, когда я добавляю миграцию, в снимке добавляется следующее, что изменяет предыдущий снимок из пустого списка в пустой список . Другими словами, как я вижу, это то, что он, кажется, думает о двух пустых списках экземпляров как разных значений снимка.protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.UpdateData(
table: "MyTable",
keyColumn: "Id",
keyValue: 1,
column: "Aliases",
value: new List());

...
}
< /code>
, к вашему кв.[Fact]
public void CompareStuff()
{
var listX = Array.Empty().ToImmutableHashSet();
var listY = Array.Empty().ToImmutableHashSet();
var comparer = new StringSetDbConverter.ValueComparer();

var x = comparer.Snapshot(listX);
var y = comparer.Snapshot(listY);

var eq = comparer.Equals(x, y);

Assert.True(eq, "The lists should be equal");
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... s-expected
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»