Я пытаюсь настроить конверттер значений для свойства 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
Ef core valuecomprerer не работает, как и ожидалось ⇐ C#
Место общения программистов C#
-
Anonymous
1751601509
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");
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79689660/ef-core-valuecomparer-doesnt-work-as-expected[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия