如何为详细实体实现 InsertOrUpdate 方法

How to implement InsertOrUpdate Method for detail entity

我构建了我的存储库以与 EntityFramework 一起使用。我面临的一个问题是如何在这种情况下处理 InsertOrUpdate 方法:

如果我有接口方法:

void InsertOrUpdate(T entity);

此方法的实现与 master table 配合得很好:

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;
    }
}

现在,如果员工有很多这样的笔记:

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;
    }
}

我认为使用 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); 吗?