我有一个使用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的一些错误,但它使我疯狂,而且我找不到解决方法。
答案 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);
}
应该确保您的构造函数被调用