0

我建我的倉庫有問題的EntityFramework。一是用我面臨的是如何處理好InsertOrUpdate方法的情況下,這樣的:如何實現InsertOrUpdate方法詳細實體

,如果我有接口的方法:

void InsertOrUpdate(T entity); 

這種方法的實現正常工作與主表這樣的:

public void InsertOrUpdate(Employee employee) 
{ 
    if (employee.EMP_NUM == default(int)) // New entity 
    { 
     context.Entry(employee).State = EntityState.Added; 
    } 
    else  // Existing entity 
    { 
     context.Employees.Add(employee); 
     context.Entry(employee).State = EntityState.Modified; 
    } 
} 

現在,10

如果員工有很多注意事項如下:

EMP_NUM  p.k 
From_Date p.k 
Note 

如何處理同樣的方法與複合鍵這個實體:

public void InsertOrUpdate(EmployeeNote employeeNote) 
{ 
    if (employeeNote.EMP_NUM == default(int)) // New entity 
    { 

     context.Entry(employeeNote).State = EntityState.Added; 
    } 
    else  // Existing entity 
    { 
     context.EmployeeNotes.Add(employeeNote); 
     context.Entry(employeeNote).State = EntityState.Modified; 
    } 
} 
+1

我從不使用複合鍵。每個實體都從具有整數Id的基類繼承。但如果你想使用組合鍵,這裏有一篇文章可能有幫助... http://blog.oneunicorn.com/2012/05/03/the-key-to-addorupdate/ – Colin

+0

@Colin:你能否澄清請舉例說明您的解決方案 –

回答

1

我想用一個struct將是最簡單的解決方案:

public struct EmployeeKey 
{ 
    public int k; 
    public DateTime d; 
} 

if (new EmployeeKey{k = employeeNote.EMP_NUM, d = employeeNote.From_Date} 
      .Equals(default(EmployeeKey)) 
{ 
    context.Entry(employeeNote).State = EntityState.Added; 
} 

default(struct)創建了其所有成員的默認值struct

在一些小旁註:

這條線:context.Employees.Add(employee);對現有的實體,應該不是很context.Employees.Attach(employee);