c'est la façon dont je l'ai utilisé pour sauver record avec LINQ: (mon Q est ci-dessous)Enregistrer une nouvelle ou mise à jour existe record avec LINQ
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;
}
}
mes questions sont les suivantes:
a. sont les déclarations si nesccery? pourquoi ne pas faire l'attribution sans la vérification ? mybe le bloc if prend plus de cpu.
b. pourquoi spearate le nouveau bloc d'enregistrement et le bloc de mise à jour?
lorsque l'enregistrement est nouveau, il fera
db.Employees.InsertOnSubmit(oldEmployee);
puis procéder à la routine de mise à jour ...
a. Les instructions if avant d'attribuer une valeur doivent empêcher le contexte de marquer l'enregistrement comme étant mis à jour si les valeurs ne changent pas réellement. b est bien géré par Joseph ci-dessous. –