0
假設我有一個公司與員工的名單:EF6 - 它屬於一個已經堅持實體添加新的實體
public class Company
{
public List<Employee> Employees { get; set; }
}
public class Employee
{
public string Name { get; set; }
public Company CompanyOfWork { get; set; }
}
我的公司已經存在的數據庫,但我需要保存一些新僱員。
目前,我會遍歷員工,尋找它需要保存到數據庫新的(在我的情況下,ID = 0)的列表,並將其添加:
foreach(var employee in company.Employees)
{
if(employee.ID == 0)
db.Employees.Add(employee);
}
這就造成了新員工在數據庫中,但它也在DB中創建了公司的重複記錄(大概是因爲EF查看員工上的CompanyOfWork,並且假定它需要添加到數據庫?)
這是做什麼的正確方法防止它創建重複?
我是否需要先檢查公司是否已經存在,如果存在,請附上它?我的建議沒有感覺很乾淨。
謝謝你。這是否意味着當你有一個非常複雜的對象時,你需要:遍歷所有實體,檢查它們是否存在 - 如果不存在,則添加它們,如果它們存在,則標記爲已更新。如果它們是新的並且屬於父級,則在數據庫中查找()父級,然後添加它們。我很驚訝地保存一個複雜的對象是多麼的尷尬,有沒有一個具體的例子來說明它是如何整齊地完成的? – FBryant87
那麼你只需要檢查你是否必須添加,更新或刪除;如果您更新它,ChangeTracker將自動將實體標記爲髒。在我的公司,我們通過爲創建,更新和刪除提供明確的端點將此檢查移至另一圖層。如果您想創建父母與子女之間的關係,只需將其添加到父級。如果關係已經存在,您可以直接通過它的ID獲取員工,更新它,一切都會很好。對於獨立實體,您只需將它們直接添加到DbSet中,就像您在原始文章中完成的那樣。 –
經過進一步測試,我們已經意識到Find()方法不會拋出錯誤 - 但也不會向數據庫添加任何內容。如果包含「db.Entry(employee)= EntityState.Added」,它會將數據添加到數據庫中,但這會再次產生重複數據。任何想法,如果有一些簡單的我們失蹤了? (我正在使用上面的確切方法) – FBryant87