EF6干扰嵌套类的构造函数,不允许与静态类进行交互

时间:2018-12-06 17:00:02

标签: c# constructor entity-framework-6

我有一个使用Entity Framework 6的Code First应用程序。我遇到了一个问题,其中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();
}

上面是实时代码的近似值,它复杂得多。我尚未为此伪代码设置EF,因此我实际上并未运行上述代码,但我认为它应该有相同的问题。

因此,这里发生的是ParentClass的构造函数按预期工作,但ChildClass却没有。奇怪的是,ChildClass的某些功能有效;例如,如果我向构造函数添加类似SomeOtherField = "Hello, world";的行,则该行将按预期工作。但是,似乎我尝试与其他对象进行交互的任何操作均无效。我还发现ParentClass可以使用调试中断,但是ChildClass构造函数会完全绕过调试中断。

你知道这里发生了什么吗?我所能想到的是,这是EF的一些错误,但它使我疯狂,而且我找不到解决方法。

1 个答案:

答案 0 :(得分:1)

在数据库调用中,可以使用该对象:

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);

}

应该确保您的构造函数被调用