2014-09-19 97 views
0

好吧,我會盡我所能描述這一點。 例如 - 我在數據庫中有兩個表,員工&配置文件。 員工擁有ProfileID的外鍵,因此1個配置文件可以分配給許多員工以確定他們的訪問權限,一切都很好。實體框架重新添加現有數據庫對象

在使用c#的EF中 - 當選擇說創建一個員工並設置一個已經存在的配置文件如下所示時,它會嘗試再次將該配置文件添加到數據庫中?

using (var ds = new DSEntities()) 
       { 
        Employee e = new Employee(); 
        e.AccessProfile = ds.AccessProfiles.First(); 
        ds.Employees.Add(e); 
        ds.SaveChanges(); 
       } 

只有員工記錄是新的,而配置文件不是。任何人都可以確認它爲什麼這樣做? 我可以直接設置Employee.AccessProfileID鍵,並將其設置爲ds.AccessProfiles.First()。AccessProfileID,所以我不與該對象一起工作,並且不會嘗試再次添加它作爲它的參考 - 但我真的沒有認爲我也應該有,我一定會錯過一些東西,我可以直接選擇這些元素作爲對象,但分配它們總是會導致數據庫重新添加配置文件等。

回答

0

添加現有配置文件的最簡單方法是通過設置Employee對象的AccessProfileID,像這樣:

using (var ds = new DSEntities()) 
       { 
        Employee e = new Employee(); 
        e.AccessProfileId = ds.AccessProfiles.First().Id; 
        ds.Employees.Add(e); 
        ds.SaveChanges(); 
       } 

至於爲什麼當你從你的榜樣執行代碼EF創建新的配置文件,它必須做一些事情的Wi它如何處理圖形。由於Employee對象具有EntityState.Added,我猜它也將它自己傳遞給子對象。欲瞭解更多信息here's來自Julie Lerman的一篇文章,內容非常相同。

相關問題