如何实现详细信息实体的插入或更新方法

本文关键字:插入 更新 新方法 实体 详细信息 何实现 实现 | 更新日期: 2023-09-27 18:34:03

我构建了与EntityFramework一起使用的存储库。我面临的问题之一是在这种情况下如何处理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;
    }
}

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

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);吗?