Реализация объектов DDD значений с EF Core типами объектов, принадлежащих , имеет несколько недостатков, вызванных тем, что типы объектов, принадлежащих EF Core, по-прежнему считаются объектами , и свойства, возвращающие собственные типы объектов, рассматриваются как свойства навигации .
В данном конкретном случае проблема вызвана последней вышеупомянутой вещью вместе со следующими Конструкторами типов сущностей ограничение
Некоторые вещи на заметку:
- EF Core не может устанавливать свойства навигации (такие как Блог или Посты выше), используя конструктор.
Обходной путь / решение заключается в предоставлении специального частного конструктора, который будет использоваться EF:
public BasketItem(Guid id, Guid productId, DateTimeOffset addedAt, Money price) : this(id, productId, addedAt)
{
Price = price;
}
/// <summary>
/// EF constructor
/// </summary>
private BasketItem(Guid id, Guid productId, DateTimeOffset addedAt) : base(id)
{
ProductId = productId;
AddedAt = addedAt;
}
И, конечно, используйте атрибут [Owned]
или OwnsOne
свободный API для сопоставления Money
как принадлежащего типу сущности.