Работая над составлением курса Entity Framework Core 2.1, я наткнулся на функцию ValueConverter.
Это позволяет вам подключиться к середине преобразования из определенного столбца в настраиваемое свойство в вашем классе сущности и наоборот.
Первый вариант использования, который я придумал, - это сериализованные данные JSON в столбце SqlServer. В настоящее время у нас есть нечто подобное в нашем проекте, и это выглядит многообещающим. Фактически, это уже сделано.
Давайте посмотрим, как написать свойство расширенного столбца.
Модель основана на таблице DimCustomer базы данных AdventureWorksDW из репозитория баз данных примеров.
В нашем приложении мы хотим показать обратный отсчет дня рождения для каждого из наших клиентов, но вместо десериализации даты мы хотим сохранить его в настраиваемом расширенном свойстве BirthDay.
Но EF не может неявно преобразовать тип базы данных в пользовательский тип CLR. Значит, нам нужно будет написать преобразование самостоятельно.
Для свойства BirthDay типа сущности Customer мы указываем, какой столбец мы хотим настроить таргетингом (BirthDate), и указываем преобразование с помощью метода расширения HasConversion, который занимает два параметры:
- Преобразование из свойства в столбец
- Преобразование из колонки в собственность
Имейте в виду, что тип, возвращаемый из первого параметра, должен быть поддерживаемым типом EF, иначе построение модели завершится ошибкой во время выполнения.
После преобразования мы можем использовать метод DaysToNextBirthDay и позволить нашим клиентам отсчитывать время до следующего дня рождения!