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

时间:2016-02-10 08:53:09

标签: c# entity-framework entity-framework-6 repository-pattern dbcontext

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

如果我有接口方法:

   var d2=new Date(); 
   d2.setHours(d2.getHours()+24);
   d2.setMinutes(d2.getMinutes()+30);

此方法的实现适用于主表,如:

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

1 个答案:

答案 0 :(得分: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);吗?