Entity framework 4 EF4.1包括不包括';如果在构造函数中实例化非列表关联属性,则无法工作

Entity framework 4 EF4.1包括不包括';如果在构造函数中实例化非列表关联属性,则无法工作,entity-framework-4,ef-code-first,Entity Framework 4,Ef Code First,我有一些简单的代码第一类,具有多对一关系。如果我检索一个孩子并使用Include来检索学校,那么如果我注释掉School=new School()行,它就可以正常工作,但如果它在,则不会填充学校类。我假设这是预期的行为(有人能证实吗?),但这让我大吃一惊,特别是考虑到对集合属性进行同样的操作效果很好 public class Child { public Child() { School = new School(); } public

我有一些简单的代码第一类,具有多对一关系。如果我检索一个孩子并使用Include来检索学校,那么如果我注释掉School=new School()行,它就可以正常工作,但如果它在,则不会填充学校类。我假设这是预期的行为(有人能证实吗?),但这让我大吃一惊,特别是考虑到对集合属性进行同样的操作效果很好

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");
    }
}
公共类子类
{
公共儿童()
{
学校=新学校();
}
公共int Id{get;set;}
公共字符串名称{get;set;}
公共int SchoolId{get;set;}
公立学校{get;set;}
}
公立学校
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共ICollection子项{get;set;}
}
公共类TestContext:DbContext
{
公共测试上下文(字符串连接字符串)
:基本(连接字符串)
{
}
公共DbSet子项{get;set;}
}
公开课考试
{
公开考试()
{
var context=newtestcontext(“…connectionstring…”);
var child=context.Children.Include(x=>x.School).Where(x=>x.Id==1.SingleOrDefault();
Assert(child.School.Id!=0,“学校为空”);
}
}

是,在默认构造函数中实例化引用导航属性会导致问题:

它对集合很有效,因为在本例中,您只是实例化一个空集合,而不是任何引用的对象。但最好避免对引用属性执行此操作