C# EF6干扰嵌套类构造函数,不允许与静态类交互

C# EF6干扰嵌套类构造函数,不允许与静态类交互,c#,constructor,entity-framework-6,C#,Constructor,Entity Framework 6,我有一个带有Entity Framework 6的代码优先应用程序。我遇到了一个问题,EF似乎以奇怪的方式干扰了我的构造函数 public class ParentClass { public int ParentClassId { get; set; } public string SomeField { get; set; } public IList<ChildClass> ChildClasses { get; set; } public P

我有一个带有Entity Framework 6的代码优先应用程序。我遇到了一个问题,EF似乎以奇怪的方式干扰了我的构造函数

public class ParentClass
{
    public int ParentClassId { get; set; }
    public string SomeField { get; set; }
    public IList<ChildClass> ChildClasses { get; set; }

    public ParentClass()
    {
        BodySingleton.Instance.Strings.Add(SomeField);
    }

    public class ChildClass
    {
        public int ChildClassId { get; set; }
        public string SomeOtherField { get; set; }

        public ChildClass()
        {
            BodySingleton.Instance.Strings.Add(SomeOtherField);
        }
    }
}

public sealed class BodySingleton
{
    public List<string> Strings { get; set; }

    static BodySingleton()
    {
    }

    private BodySingleton()
    {
        Strings = new List<string>();
    }

    public static BodySingleton Instance { get; } = new BodySingleton();
}
公共类父类
{
public int ParentClassId{get;set;}
公共字符串SomeField{get;set;}
公共IList子类{get;set;}
公共父类()
{
BodySingleton.Instance.Strings.Add(SomeField);
}
公营儿童班
{
public int ChildClassId{get;set;}
公共字符串SomeOtherField{get;set;}
公共儿童班()
{
BodySingleton.Instance.Strings.Add(SomeOtherField);
}
}
}
公共密封类单体
{
公共列表字符串{get;set;}
静态单体()
{
}
私人机构单身人士()
{
字符串=新列表();
}
公共静态BodySingleton实例{get;}=new BodySingleton();
}
以上是更复杂的实时代码的近似值。我还没有为这个psuedo代码设置EF,所以我没有实际运行上面的代码,但我相信它应该有同样的问题

因此这里发生的是
ParentClass
的构造函数按预期工作,但是
ChildClass
没有。奇怪的是
ChildClass
;例如,如果我添加一行,如
SomeOtherField=“Hello,world”到构造函数,它将按预期工作。但我所做的任何尝试与其他对象交互的事情似乎都不起作用。我还发现调试中断与
父类
一起工作,但被
子类
构造函数完全绕过


知道这里发生了什么吗?我所能想到的是,EF存在一些缺陷,但它让我发疯,我无法找到解决方法。

在您的db调用中,获取您可以使用的对象:

ParentClass par;
using (DbContext _context = new DbContext(connectionstring))
{
    par = _context.ParentClass
        .Include(c=>c.ChildClasses) //This include loads also the children
        .Single(p => p.ParentClassId  == 1);

}

应该确保调用构造函数

嘿,EF是用C#编写的,它不能做普通代码或反射代码无法做的事情。它需要公共的无参数构造函数并调用它们(通过反射),因此无法绕过构造函数代码。请记住,在您访问它之前,EF不会加载您的
ChildClass
。试试这个,看看是否可以在构造函数中找到断点:
myDbContext.Parents.First().ChildClasses.ToList()@MikeH-Hmm这似乎确实有效。您的评论使我意识到我的示例中有一个错误,
ChildClasses
属性实际上是一个IList而不是一个列表。这很有意义,构造函数是在我检查变量时触发的,而不是在我运行脚本时触发的。有没有办法让EF自动加载所有内容?有没有办法包含整个结构?我的结构非常复杂,我尽量避免手工绘制整个结构。我做了一些搜索,答案似乎是“否”,但我想知道我是否遗漏了什么;另请参见:我以前尝试过,但它似乎没有任何作用=\应该有效,您是否尝试过将其放置在上下文的构造函数中?对她很好,你设法让它工作起来了。我将自己再调查一下懒惰的负载。只是想看看我能不能让它工作。祝你周末好