我有三个表Job,Contact和一个名为JobContact的引用表。当我从JobContact表中删除记录时,所以记录从数据库中删除,但它仍然存在于代码中。我的意思是,当我按键选择Job时,当我正在访问job.JobContact时,所以记录仍在那里。
如何强制EF从此表中获取当前数据?
编辑:
我正在使用EF来删除记录。以下是我正在做的代码示例:
第1步:从JobContact中删除记录:
var jobContactRepos = RepositoryFactory.GetRepository<JobContact>();
var jobContact = jobContactRepos.SelectByKey(jobContactId);
jobContactRepos.Delete(jobContact);
jobContactRepos.Save();
步骤2:在完成第1步后从DB获取作业记录:
var jobRepos = RepositoryFactory.GetRepository<Job>();
var job = jobRepos.SelectByKey(id);
在步骤1之后,记录从DB中删除:没关系。
在第2步之后,job仍然存在于job.JobContact实体中:它不正常。
RepositoryFactory已经创建了一个新的上下文。所以我不明白。我应该在代码中的哪个位置使用Refresh()方法?
感谢
答案 0 :(得分:0)
您可以处置EF上下文并创建一个新上下文,这将强制EF从DB获取新数据,而不是使用可能的缓存数据。或者,您可以使用RefreshMode.StoreWins
在您的上下文中致电Refresh()
。
但真正的问题是为什么要直接从数据库中删除此记录而不使用EF呢?如果您使用EF上下文从Contact
实体的Contacts
导航属性集合中删除Job
实体,则首先应该出现此问题。
修改强>
参考表应在EF中表示为Contacts
实体中的导航属性Job
,以及Jobs
实体中的导航属性Contact
。您使用的是旧版本的EF(我可能对以前的版本不熟悉)或者是否有自定义存储库层来引入此参考实体?