Сохраняет ли Entity Framework связанные классы автоматически?
предположим, что у нас есть такие классы
public class A{
string someField { get; set; }
public virtual B B {get; set; }
}
public class B {
int someIntField {get; set; }
[ForeignKey("Id")]
[Required]
public virtual A A { get; set; }
}
в коде я создаю новые экземпляры для обоих из них и создаю отношение типа:
A a = new A () { someField = "abcd"};
B b = new B () { someIntField = 42 };
A.B = b;
B.A = a;
должен ли я использовать DBContext для сохранения обоих классов:
using (var db = new myDbContext()) {
myDbContext.As.Add(A);
myDbContext.Bs.Add(B);
myDBContext.SaveChanges();
}
или сохранить его так:
using (var db = new myDbContext()) {
myDbContext.As.Add(A);
myDbContext.SaveChanges();
}
достаточно ли хранить связанные объекты в базе данных?
3 ответов
из вашего примера, если вы создаете экземпляр новых объектов сущности, а затем назначаете дочерний объект свойству родительского объекта, то EF фактически создаст новый дочерний экземпляр (запись) и сопоставит его с родительским в качестве ссылки.
ваш фрагмент кода немного запутан, потому что у вас есть ссылка от A до B и B до A, но рассмотрите следующее:
Если у вас было 2 сущности:
public class A
{
public int Id;
}
public class B
{
public int Id;
public A A;
}
и при сохранении вы сделали что-то вроде это:
A a = new A();
B b = new B();
b.A = a;
dbcontext.SaveChanges();
затем EF создаст новую запись для A, новую запись для B и добавит ссылку на вновь созданную запись в B.
посмотреть этой пост для получения дополнительной информации
достаточно сохранить объект, содержащий другой объект. Он также автоматически сохранит изменения в содержащихся объектах.
вы можете просто создать небольшой пример и посмотреть сами, что работает.
using (var db = new myDbContext()) {
myDbContext.As.Add(A);
myDbContext.SaveChanges();
}
этого должно быть достаточно.