EF4.1 Включить не работает, если в конструкторе создается экземпляр свойства ассоциации, не входящей в список - PullRequest
1 голос
/ 26 августа 2011

У меня есть несколько простых классов Code First с отношением «многие к одному».Если я извлекаю ребенка и использую «Включить» для извлечения «Школы», то все работает нормально, если я закомментирую строку «Школа = новая школа ()», но с ее помощью класс «Школа» не заполняется.Я предполагаю, что это ожидаемое поведение (кто-то может подтвердить?), Но оно меня поймало, особенно если учесть, что то же самое можно сделать со свойством коллекции.

public class Child
{
    public Child()
    {
        School = new School();    
    }

    public int Id { get; set; }
    public string Name { get; set; }

    public int SchoolId { get; set; }
    public School School { get; set; }        
}

public class School
{
    public int Id { get; set; }
    public string Name { get; set; }

    public ICollection<Child> Children { get; set; }        
}

public class TestContext : DbContext
{
    public TestContext(string connectionString)
        : base(connectionString)
    {
    }

    public DbSet<Child> Children { get; set; }        
}

public class Test
{
    public Test()
    {
        var context = new TestContext("...connectionstring...");

        var child = context.Children.Include(x => x.School).Where(x => x.Id == 1).SingleOrDefault();

        Debug.Assert(child.School.Id != 0, "School is null");
    }
}

1 Ответ

2 голосов
/ 26 августа 2011

Да, создание экземпляров ссылочных навигационных свойств в конструкторе по умолчанию вызывает проблемы:

Он отлично работает для коллекций, потому что в данном случае вы просто создаете пустую коллекцию, а не объекты, на которые ссылаются. Но лучше избегать этого для справочного свойства.

...