我正在使用Entity Framework 6,出于性能原因,我先将实体加载到DbContext
中,然后在本地使用它们。到目前为止,对数据库的所有更改都经过了DbContext
,因此我的本地实体和数据库已经同步。但是,我现在必须在数据库上调用存储过程,这具有对表(在DbContext外部)进行更改的副作用,这些更改需要反映在我的实体中。通过更改,我的意思是它正在添加新记录并删除/更新现有记录。
我不想处置我的DbContext
并创建一个新的ViewModel
,因为某些实体实例包装在DbContext
类中。因此,以这种方式删除Load()
会导致UI中出现重大问题。
据我了解,仅在DbSets
的所有DbContext
上调用Reload
只会替换现有实例。因此,使用旧实体实例的任何对象均不起作用。
所以,我认为我可以使用context.Entry(entity).Reload();
方法,例如:
DbContext
这将更新我的本地实体,但是我只能对DbContext
已经知道的实体执行此操作。它不包括由于执行存储过程而创建/删除的任何新实体或DELETED实体。
所以,我正在寻找一种方法:
DbContext
的新实体DbContext
中的现有实体/home/airflow/gcs
上删除所有已删除的实体有人可以为此提供任何帮助吗?
非常感谢。
答案 0 :(得分:1)
这是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附带的向导将其映射并用方法包装。
希望您会发现这些资源很有帮助!
答案 1 :(得分:0)
通常,EntityFramework无法识别数据库中的更改并更新dbcontext
。没有针对它的优化或EntityFramework内置解决方案。
我认为您可以在SqlServer中使用CDC,将更改推送到应用程序并更新dbcontext
。但这不是适用于所有业务和业务的解决方案