Есть ли способ настроить преобразование для 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));