EfCore 2.2 Собственные типы, выбирающие базовые свойства сущностей - PullRequest
0 голосов
/ 19 июня 2019

У меня есть ValueObject с именем Money с такой подписью:

public class Money : ValueObject
{
    public decimal Amount { get; private set; }
    public Currency Currency { get; private set; }

    private Money(decimal amount, Currency currency = Currency.Nigerian_Naira)
    {
        Guard.Against.Zero(amount, nameof(amount));
        Amount = amount;
        Currency = currency;
    }

    private Money(){}

    public static Money Create(decimal amount, Currency currency = Currency.Nigerian_Naira)
    {
        return new Money(amount, currency);
    }

    public bool IsEmpty()
    {
        return Amount == 0m && Currency == Currency.Nigerian_Naira;
    }
    protected override IEnumerable<object> GetAtomicValues()
    {
        yield return Amount;
        yield return Currency;
    }
}

и у меня есть сущность, которой принадлежит этот объект значения следующим образом:

public class Account : BaseEntity
{

    public Account()
    {
        AccountId = Guid.NewGuid();
    }

    public Guid AccountId { get; set; }

    [Required]
    [StringLength(25)]
    public string AccountName { get; set; }

    [Required]
    public Money AccountBalance { get; set; }

    [Required]
    public bool IsActivated { get; set; }

    public List<Entity2> Entity2 { get; set; }

    public List<Entity1> Entity1 { get; set; }

}

Я настроил владельца в контексте следующим образом:

modelBuilder.Entity<Account>()
                    .OwnsOne(c => c.AccountBalance);

Это моя базовость, которая в основном несет простые свойства, такие как:

public abstract class BaseEntity
{
    public bool IsDeleted { get; set; }

    public DateTimeOffset CreatedDate { get; set; }

    public DateTimeOffset UpdatedDate { get; set; }

}

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

Error Message:
System.InvalidOperationException : The property 'UpdatedDate' on entity type 
'CashAccount.AccountBalance#Money' could not be found. Ensure that the 
property exists and has been included in the model.

Свойство updatedDate относится к базовому типу сущности, от которого у меня наследуются все сущности. Я расчесываю документы и не вижу ничего, что подсказывало бы мне об этом странном поведении.

Я в основном пытаюсь сохранить Учетную запись в базе данных, и она выдает мне эту ошибку, говоря, что у Money нет свойства updatedDate, которое является свойством, которое должно принадлежать сущностям. Это никогда не было проблемой со сложными типами EF6.

...