Как установить / перезаписать свойство вложенного объекта в Entity Framework Core 2.2? - PullRequest
0 голосов
/ 01 ноября 2019

Я использую EF Core 2.2 и вот мои классы сущностей.

BigBoss класс

public class BigBoss 
{
    public Guid Id { get; set; }
    public SmallBoss SmallBoss { get; set; }
    // other stuff...
}

BigBoss класс владеет SmallBoss, которому принадлежит секретарь и т. Д. .

Вот иерархия:

BigBoss -> SmallBoss -> Secretary

Секретарь имеет внешний ключ, который является Intern.

public class SmallBoss
{
    public Secretary Secretary { get; set; }
}

public class Secretary 
{
    public Intern Intern{ get; set; }
    public int? InternId{ get; set; }
    public double Number { get; set; }
}

public class Intern 
{
    public int Id { get; set; }
    public string Identifier { get; set; }
    public string Name { get; set; }
}

Вот как я настраиваю собственную сущность с контекстом данных(упрощено для примера):

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{
    modelBuilder.Entity<BigBoss>()
                    .OwnsOne(
                        bigBoss => bigBoss.SmallBoss, smallBoss => {
                            smallBoss.OwnsOne(smallBoss2 => smallBoss2.Secretary);
                        });
}

Когда я собираюсь перезаписать / установить свойство SmallBoss в существующей сущности BigBoss

bigBossFound = myContext.BigBosses.FirstOrDefault(bigB => bigB.Id == bigBossId);

// it does not work. smallBossInput & bigBossFound.SmallBoss will have all its properties set as null.
// bigBossFound.SmallBoss = smallBossInput;

// it works
bigBossFound.SmallBoss.Secretary = smallBossInput.Secretary;

// it cannot work // I could not recall the error message :/
// myContext.BigBosses.Update(bigBoss);

myContext.SaveChanges();

Вопросы:

  1. Почему я не смог установить собственное имущество (BigBoss.SmallBoss) напрямую?

  2. Почему я не смог использовать myContext.BigBosses.Update(bigBoss); для собственного предприятия?

  3. Каков наилучший метод / метод для замены / обновления сущности с вложенным типом? Или я могу безопасно использовать myContext.BigBosses.Update(bigBoss); в EF Core 3.0?

Спасибо.

...