我如何使用实体框架只搜索存储而不是本地数据

本文关键字:数据 存储 搜索 何使用 实体 框架 | 更新日期: 2023-09-27 18:14:39

我正在使用EF 4.1,仍然试图找出一些细节。我在数据库中有一个父(一个)-子(多个)关系。表示该子对象的EF对象具有表示一个父对象的属性。我明确地设置了子节点。parentId FK字段,然后我可以执行context.Add(child),然后是context.SaveChanges(),具有正确父外键的子记录将显示在数据库中。就银行而言,一切都很好。

然而,当内存中的子对象通过诸如PK标识列之类的东西得到正确更新时,parent Property字段仍然为空。我很惊讶,这正常吗?一旦记录被创建,我回到app,到父元素的导航总是工作的。只是在创建了子属性之后,父属性并没有更新。

我想也许我可以搜索上下文的孩子我刚刚创建基于返回的PK和得到一个完全填充的孩子对象,但它不起作用。看起来我只是得到了一个相同的物体。我认为它只是搜索本地缓存并返回我已经拥有的对象。我注意到context.Child.Local似乎是一种只查看本地视图的方式,但我没有看到对应的"store"。

我如何使用实体框架只搜索存储而不是本地数据

不是设置键的值,而是设置导航属性的值(&对象引用)。例如

Child child = GetChildFromSomewhere();
Parent parent = GetParentFromSomewhere();
// Don't do this
child.ParentId = parent.ParentId;
// Use this instead
child.Parent = parent;

你不需要直接触摸键。当您像这样更改关联时,键将在适当的时候更新。

如果您直接更改键,对象引用不会自动更新(上下文不会去寻找适当的父对象并添加引用,直到您保存或与数据库重新同步)。

如果您更改对象,则键将在需要时更新。但是,你不应该直接指向键。EF用于对象关系,而不是键-键连接。

您的PK将无法正确设置,直到您创建一个新的上下文。您应该在每次SaveChange()之后处理并重新创建上下文。

您是否尝试将子对象直接添加到父对象的子EntityCollection而不是上下文ObjectSet?这也将把它添加到上下文ObjectSet中,这样您就可以避免这个问题。