Сценарий, в котором использование DbSet<T>.Create()
имеет смысл, - это присоединение существующего объекта к контексту, а затем использование отложенной загрузки связанных объектов.Пример:
public class Parent
{
public int Id { get; set; }
public virtual ICollection<Child> Children { get; set; }
}
public class Child
{
public int Id { get; set; }
public string Name { get; set; }
}
Тогда будет работать следующее:
using (var context = new MyDbContext())
{
var parent = context.Parents.Create();
parent.Id = 1; // assuming it exists in the DB
context.Parents.Attach(parent);
foreach (var child in parent.Children)
{
var name = child.Name;
// ...
}
}
Здесь запускается отложенная загрузка дочерних элементов (возможно, в результате получается пустая коллекция, но не null
).Если вы замените context.Parents.Create()
на new Parent()
, цикл foreach завершится сбоем, поскольку parent.Children
всегда null
.
Edit
Другой пример был здесь(заполнение свойства внешнего ключа новой сущности и затем лениво загруженное свойство навигации после вставки новой сущности в БД): Свойства отложенной загрузки после вставки