EF Core: ValueConverter для OwnedEntity - PullRequest
0 голосов
/ 07 июня 2019

Есть ли способ настроить преобразование для OwnedEntity в Entity Framework Core?

Предположим, у меня есть простой объект Value, у которого есть статический метод Factory, обеспечивающий только допустимые доменные объекты :

public class LatLon : ValueObject
{
    public decimal Lat { get; }

    public decimal Lon { get; }

    public static LatLon Create(decimal lat, decimal lon)
    {
        // custom validation rules where exceptions are thrown
        // which I don't want to throw directly in the constructor

        return new LatLon(lat, lon);
    }

    protected LatLon(decimal lat, decimal lon)
    {
        Lat = lat;
        Lon = lon;
    }

    protected override IEnumerable<object> GetEqualityComponents()
    {
        yield return Lat;
        yield return Lon;
    }

    public override string ToString()
    {
        return $"{Lat};{Lon}";
    }
}

Я использую LatLon Объект значения в моей сущности:

public class MyEntity
{
    // ...
    public LatLon GeoInformation { get; set; }
    // ...
}

Тогда я хочу отобразить это:

modelBuilder.Entity<MyEntity>()
    .OwnsOne(x => x.GeoInformation);

Как мне указать преобразование значения, чтобы я мог настроить, чтобы он вызывал LatLon.Create() при загрузке MyEntity из БД?


Подсказка: Если LatLon будет содержать только одно свойство, я могу сделать что-то вроде этого:

modelBuilder.Entity<MyEntity>()
    .Property(x => x.GeoInformation)
    .HasConversion(x => x.Value, x => LatLon.Create(x));
...