Работая над составлением курса Entity Framework Core 2.1, я наткнулся на функцию ValueConverter.

Это позволяет вам подключиться к середине преобразования из определенного столбца в настраиваемое свойство в вашем классе сущности и наоборот.

Первый вариант использования, который я придумал, - это сериализованные данные JSON в столбце SqlServer. В настоящее время у нас есть нечто подобное в нашем проекте, и это выглядит многообещающим. Фактически, это уже сделано.

Давайте посмотрим, как написать свойство расширенного столбца.

Модель основана на таблице DimCustomer базы данных AdventureWorksDW из репозитория баз данных примеров.

В нашем приложении мы хотим показать обратный отсчет дня рождения для каждого из наших клиентов, но вместо десериализации даты мы хотим сохранить его в настраиваемом расширенном свойстве BirthDay.

Но EF не может неявно преобразовать тип базы данных в пользовательский тип CLR. Значит, нам нужно будет написать преобразование самостоятельно.

Для свойства BirthDay типа сущности Customer мы указываем, какой столбец мы хотим настроить таргетингом (BirthDate), и указываем преобразование с помощью метода расширения HasConversion, который занимает два параметры:

  • Преобразование из свойства в столбец
  • Преобразование из колонки в собственность

Имейте в виду, что тип, возвращаемый из первого параметра, должен быть поддерживаемым типом EF, иначе построение модели завершится ошибкой во время выполнения.

После преобразования мы можем использовать метод DaysToNextBirthDay и позволить нашим клиентам отсчитывать время до следующего дня рождения!