我有一个与另一个实体有一对一关系的实体。它们在我的实体模型中被适当地连接,并且基础表由FK相关联。
当我拨打.SaveChanges()
时,我的实体已保存。我可以看到已经生成的ID和所有相应的值。
我也可以手动查看数据库并查看它已保存正确。
但是,我的代码中的相关实体都是null。它们在上下文菜单中显示为null,并且它们在代码中解析为null ...如果我使用新的Id调用我的get方法,我会得到我期望的实体,再次使用null相关实体。
如果我刷新页面(或重新构建类),那么一切都是正确的。
编辑:更多详情。
在我的特定情况下,我有一个相当于连接表,在事物之间创建依赖关系。
考虑一个名为“Things”的表,其中包含“ThingId”列
然后我有另一个名为“ThingDependencies”的表,其中有三列“DependencyId”,“FromThingId”和“ToThingId”,两者都是FK到Things.ThingId
我已在代码中声明此数据是非循环的。
当我保存新的ThingDependency
时,它会相应地显示持久值......即:它具有Id,以及From和To Id值。
... 但关联的实体为空,在我处理数据上下文并重新实例化之前我无法访问它们......然后它就可以了。
答案 0 :(得分:2)
当我保存新的ThingDependency时,它会显示持久值 恰当的......那就是:它有它的Id,以及From和To Id 值。
...但关联的实体为空,直到我才能访问它们 我处理数据上下文并重新实例化......然后它就可以了 细
我只能参考你的问题的这部分听起来像(但我的解释可能完全错了)你正在做这样的事情:
int newThingDependencyId = 0;
using (var context = new MyContext())
{
ThingDependency newThingDependency = new ThingDependency();
newThingDependency.FromThingId = 1;
newThingDependency.ToThingId = 2;
context.ThingDependencies.Add(newThingDependency);
context.SaveChanges();
newThingDependencyId = newThingDependency.Id;
Thing fromThing1 = newThingDependency.FromThing;
Thing toThing1 = newThingDependency.ToThing;
}
using (var context = new MyContext())
{
ThingDependency newThingDependency = context.ThingDependencies
.Find(newThingDependencyId);
Thing fromThing2 = newThingDependency.FromThing;
Thing toThing2 = newThingDependency.ToThing;
}
在这里,您想知道为什么fromThing1
和toThing1
为null
,但fromThing2
和toThing2
不是null
,对吧?
如果是,那么你必须替换......
ThingDependency newThingDependency = new ThingDependency();
... ...通过
ThingDependency newThingDependency = context.ThingDependencies.Create();
Create
将创建一个动态代理,该代理能够通过延迟加载加载fromThing1
和toThing1
,而使用new
运算符创建的普通对象则不会。 Find
(或任何LINQ查询,如Single
等)也将实例化代理,这是访问第二个上下文中的导航属性的原因。假设您的导航属性标记为virtual
而您没有明确禁用延迟加载。
(如果我对这个完全错了,请为所有Thing
的爱情提供一些代码片段,以显示您正在做的事情!)
答案 1 :(得分:0)
Provalvemnete你正在使用Lazy Loading。 尝试在查询中使用“包含(”实体“)。
var employees = db.Employees。包括(x => x.Address)。 ToList();
ATT
Julio Spader