Я использую 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();
Вопросы:
Почему я не смог установить собственное имущество (BigBoss.SmallBoss
) напрямую?
Почему я не смог использовать myContext.BigBosses.Update(bigBoss);
для собственного предприятия?
Каков наилучший метод / метод для замены / обновления сущности с вложенным типом? Или я могу безопасно использовать myContext.BigBosses.Update(bigBoss);
в EF Core 3.0?
Спасибо.