gpt4 book ai didi

c# - 如何在对数据库进行外部更改后更新/同步 DbContext

转载 作者:行者123 更新时间:2023-12-05 07:28:29 27 4
gpt4 key购买 nike

我正在使用 Entity Framework 6,出于性能原因,我预先将我的实体加载到我的 DbContext 中,然后在本地使用它们。到目前为止,对数据库的所有更改都已通过 DbContext,因此我的本地实体和数据库已同步。但是,我现在必须在数据库上调用存储过程,这具有对需要反射(reflect)在我的实体中的表(在 DbContext 之外)进行更改的副作用。通过更改,我的意思是它正在添加新记录并删除/更新现有记录。

我不想处理我的 DbContext 并创建一个新的,因为一些实体实例包含在 ViewModel 类中。因此,以这种方式删除 DbContext 会导致 UI 出现重大问题。

据我了解,只需在 DbContext 的所有 DbSets 上调用 Load() 即可替换现有实例。因此,任何使用旧实体实例的对象都将不起作用。

所以,我想我可以像这样使用 Reload 方法:

context.Entry(entity).Reload();

这会更新我的本地实体,但我只能对 DbContext 已知的实体执行此操作。它不涵盖因执行存储过程而创建/删除的任何新实体或已删除实体。

所以,我正在寻找一种方法:

  1. 从数据库加载对我的 DbContext 来说是新的实体
  2. 重新加载我的 DbContext 中的现有实体
  3. 从我的 DbContext 中删除所有已删除的实体>

最佳答案

这是 Entity Framework 的官方文档。
从分析您的数据库情况开始,它会建议智能且快速的方法来获取您想要的内容,在必要时详细说明数据读取策略(如急切或延迟加载)或提供正确使用代码生成和向导 GUI 的教程。

http://www.entityframeworktutorial.net/choosing-development-approach-with-entity-framework.aspx

这里有一些关于数据读取策略的更详细的信息和教程:
https://www.c-sharpcorner.com/article/eager-loading-lazy-loading-and-explicit-loading-in-entity-framework/

正如我在评论中告诉您的那样,我建议采用数据库优先的方法和延迟加载以避免不受控制的数据行为(或在运行存储过程时重新加载整个数据库)。

说到SP,可以简单的通过Entity Framework自带的Wizard进行映射,用方法包装。

希望这些资源对您有所帮助!

关于c# - 如何在对数据库进行外部更改后更新/同步 DbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53340675/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com