0

我有一個大問題。 我正在使用實體框架5和UnitOfWork模式(使用存儲庫)。 我有一個實體對象,人(即從實體繼承,並已獲得一些屬性:姓名,IdAddress(並與idAddress鏈接的虛擬實體地址)實體框架5:提交不刷新內存中的實體

當我使用下面的代碼:

Person p = personRepository.FindById(5); 

我正確地獲得實體,外國是好的,同時也宣佈爲虛擬實體裝載

然而,當我使用下面的代碼:

Person p = new Person(); 
p.IdAddress = 1; 
personRepository.Add(p); 
unitOfWork.commit(); 

實體p對地址實體具有空值。 如何在執行提交後「強制」刷新內存中的實體? 非常感謝您的幫助

+0

(當我嘗試檢索,再過一會兒,實體只是通過使用FindById,正確地獲得地址實體堅持)..所以我想有一個刷新後持續行爲 – user2328912

回答

3

使用ObjectContextRefresh方法:

context.Refresh(RefreshMode.StoreWins, p); 

或者,如果您使用的是DbContext

context.Entry<Person>(p).Reload(); 
+0

我」已經閱讀了這種方法,但我有2個問題:1)我無法訪問上下文:我只有在知識庫和unitOfWork對象的可見性2)你確定,通過「重新加載」實體聚合,我確保組成它的所有實體都以級聯的方式刷新? – user2328912

+0

@ user2328912:1)您可以更改您的repository.Add方法,以便重新加載實體; 2)在我嘗試之前我不確定任何事情;) –

0

什麼工作對我來說是再實體化在加載頁面之前存儲庫。您的代碼會有所不同,但是您可以通過實體框架上下文中的personRepository對象生成數據,您需要在模型發送到視圖之前進行此操作。

public ActionResult Form(int id) 
    { 
     _repository = new EntityFrameworkRepository<Model>(new EntityContext(), "Id"); 
     return View(_repository.Where(c => c.Id == id).FirstOrDefault() == null ? new Model() : _repository.Where(c => c.Id == id).FirstOrDefault()); 
    }