Присвоение нового экземпляра OwnedType владельцу создает исключение InvalidOperationException - PullRequest
0 голосов
/ 28 сентября 2019

Обратите внимание на следующее.

Доменные объекты

public class OwningType 
{
    public Guid Id { get; private set; }
    public OwnedType Owned { get; private set; }

    public OwningType() 
    {
        Id = Guid.NewGuid();
    }

    public void SetOwned(string name)
    {
        if(Owned != null) throw new Exception("Already owned!");

        Owned = new Owned(name);
    }
}

public class OwnedType 
{
    public string Name { get; private set; }

    public OwnedType(string name) 
    {
        Name = name;
    }
}

Конфигурация сопоставления:

public override void Configure(EntityTypeBuilder<OwningType> builder)
{
    base.Configure(builder);

    builder.OwnsOne(x => x.OwnedType).WithOwner();
}

Логика приложения:

  1. Создание нового экземпляра OwningType и сохранение в БД.
public void CreateNew()
{
    var owning = new OwningType();
    dbSession.Add(owning);
    dbSession.SaveChanges();
}
Ситуация OwningType изменяется, и нам нужно добавить экземпляр Owned.
public void AddOwned(Guid owningId, string name)
{
    var owning = dbSession.Get<OwningType>(owningId);
    owning.SetOwned(name);
    dbSession.SaveChanges();
}

В результате получается следующее исключение:

Система.InvalidOperationException: сущность типа 'OwnedType' делит таблицу 'OwningType' с сущностями типа 'OwningType', но не существует сущности этого типа с таким же значением ключа, который был бы помечен как 'Добавленный'.Подумайте об использовании 'DbContextOptionsBuilder.EnableSensitiveDataLogging', чтобы увидеть значения ключей.

Поскольку собственные типы EF Core 3.0 являются обнуляемыми.Я хотел бы использовать эту функциональность для создания экземпляров собственных типов на более позднем этапе жизни объекта.До EF Core 3.0 нужно было создать пустой экземпляр OwnedType

Как я могу обновить свойство Owned OwningType, не сталкиваясь с проблемой отслеживания изменений?

...