Можно ли определить ValueConversion для частного поля? - PullRequest
0 голосов
/ 07 февраля 2019

EF Core позволяет вам указать личное поле для использования в базе данных, используя строковый синтаксис:

modelBuilder.Entity<MyEntity>().Property("myField");

И вы можете указать преобразования значений для свойств:

modelBuilder
    .Entity<MyEntity>()
    .Property(e => e.MyProperty)
    .HasConversion(
        v => v.ToInt(),
        v => new MyProperty(v));

Но так ли этоМожно указать преобразование значения для частного поля?Это не компилируется, предположительно, потому что тип неизвестен:

// won't work
modelBuilder.Entity<MyEntity>().Property("myField")
    .HasConversion(
        v => v.ToInt(),
        v => new MyFieldType(v));

Также нельзя использовать параметр универсального типа, потому что они предназначены для предопределенных преобразователей значений, предоставляемых EF Core:

// won't work
modelBuilder.Entity<MyEntity>().Property("myField")
    .HasConversion<MyFieldType>(
        v => v.ToInt(),
        v => new MyFieldType(v));

Можно ли определить ValueConversion для частного поля?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

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

Также позволяет указать тип свойства:

modelBuilder.Entity<MyEntity>()
    .Property<MyFieldType>("myField")
//                 ^

Теперь все стандартные API-интерфейсы для преобразователей типизированных значений работают:

.HasConversion(
    v => v.ToInt(),
    v => new MyProperty(v));
0 голосов
/ 07 февраля 2019

Да, вам просто нужно сначала определить новый ValueConverter:

ValueConverter<MyFieldType, int> myConverter = new ValueConverter<MyFieldType, int>(
    v => v.ToInt(),
    v => new MyFieldType(v));

modelBuilder.Entity<MyEntity>()
    .Property("myField")
    .HasConversion(myConverter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...