Это мой первый раз с использованием EF. Таким образом, я, возможно, пропустил что-то простое, что предотвращает ленивую загрузку моего BClass. Когда я загружаю AClass, свойство «B» равно null. Я бы ожидал, что он будет заселен, как сохранится.Entity Framework 6 - ленивая загрузка не работает
В моем примере у меня есть два простых классов:
public class AClass
{
public AClass()
{
Id = Guid.NewGuid();
B = new BClass();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
public string Name { get; set; }
public virtual BClass B { get; set; }
}
public class BClass
{
public BClass()
{
Id = Guid.NewGuid();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
public string Description { get; set; }
}
В классе 'Контекст':
public DbSet<AClass> AClasses { get; set; }
public DbSet<BClass> BClasses { get; set; }
Ниже приведен простой тест. Я ожидал, что x.B будет загружен. Вместо этого он равен нулю?
using (var db = new TestContext())
{
AClass a = new AClass();
a.Name = "AClass";
a.B.Description = "BClass Description Goes Here!";
db.AClasses.Add(a);
db.SaveChanges(); // Works. Confirmed both a and a.B are persisted to the database
}
using (var db = new TestContext())
{
AClass x = db.AClasses.Where(a => a.Name == "AClass").FirstOrDefault();
System.Console.WriteLine(x.Name);
System.Console.WriteLine(x.B.Description); // x.B is null. Expected it to load and the .Description property to be "BClass Description Goes Here!"
}
Изменения были сохранены в базе данных правильно. Я еще не могу опубликовать снимок экрана.
Из AClass таблицы:
Id Name B_Id B7937E1B-9CC0-4318-B179-0D54B23B6CDA AClass 560D066B-4848-454D-B92C-F6AE4232057E
Из BClass таблицы:
Id Description 560D066B-4848-454D-B92C-F6AE4232057E BClass Description Goes Here!
Entity Framework Version: 6.0.0.0
Он будет работать только в том случае, если объект объекта привязан к некоторому экземпляру TestContext, когда первый оператор использования выполнен с использованием контекста, удаляется объект, и ваш ленивый запрос на загрузку не может быть выполнен. –
Так как же я получу ленивую загрузку для работы во втором использовании заявления? – 360code
Вы можете использовать один оператор using для этих запросов –