使用linq保存新记录或更新存在记录

时间:2009-09-03 18:11:37

标签: linq

这是我用linq保存记录的方式:(我的Q在下面)

    public void SaveEmployee(Employee employee)
    {

        using (BizNetDB db = new BizNetDB())
        {
            BizNet.SqlRep.Data.Employee oldEmployee = (from e in db.Employees
                                                       where e.EmployeeID == employee.EmployeeID
                                                   select e).SingleOrDefault();
            if (oldEmployee == null)
            {
                oldEmployee = new BizNet.SqlRep.Data.Employee();
                oldEmployee.BirthDate = employee.BirthDate;
                oldEmployee.WorkRole = employee.WorkRole;
                oldEmployee.CurrentFlag = employee.CurrentFlag;
                oldEmployee.HireDate = employee.HireDate;
                ...
                db.Employees.InsertOnSubmit(oldEmployee);
            }
            else
            {
                if (oldEmployee.BirthDate.Date != employee.BirthDate.Date)
                    oldEmployee.BirthDate = employee.BirthDate;
                if (oldEmployee.CurrentFlag != employee.CurrentFlag)
                    oldEmployee.CurrentFlag = employee.CurrentFlag;
                if (oldEmployee.HireDate.Date != employee.HireDate.Date)
                    oldEmployee.HireDate = employee.HireDate;
            }

            oldEmployee.ModifiedDate = DateTime.Now;
            db.SubmitChanges();
            employee.EmployeeID = oldEmployee.EmployeeID;
        }
    }

我的问题是:

一个。是if语句nesccery?为什么不在没有的情况下进行分配 校验?  mybe if if block需要更多cpu ..

湾为什么要翻新新记录块和更新块?

当记录是新的时,它会做

db.Employees.InsertOnSubmit(oldEmployee);

然后继续更新例程...

1 个答案:

答案 0 :(得分:6)

你这样做的方式是你需要if语句的唯一原因是新建它并插入它,所以我会使用if语句。

我会这样做:

 public void SaveEmployee(Employee employee)
{
    using (BizNetDB db = new BizNetDB())
    {
        BizNet.SqlRep.Data.Employee oldEmployee = 
                    (from e in db.Employees
                    where e.EmployeeID == employee.EmployeeID
                    select e).SingleOrDefault();

        if (oldEmployee == null)
        {
            oldEmployee = new BizNet.SqlRep.Data.Employee();
            db.Employees.InsertOnSubmit(oldEmployee);
        }

        if (oldEmployee.BirthDate.Date != employee.BirthDate.Date)
            oldEmployee.BirthDate = employee.BirthDate;
        if (oldEmployee.CurrentFlag != employee.CurrentFlag)
            oldEmployee.CurrentFlag = employee.CurrentFlag;
        if (oldEmployee.HireDate.Date != employee.HireDate.Date)
            oldEmployee.HireDate = employee.HireDate;

        oldEmployee.ModifiedDate = DateTime.Now;
        db.SubmitChanges();
        employee.EmployeeID = oldEmployee.EmployeeID;
    }
}

我也认为有一种方法可以将一个对象的属性映射到另一个对象,但此刻它让我感到惊讶。它可能无法用于你想要做的事情,因为看起来你以后用ModifiedDate和EmployeeID做了一些其他事情。