Most efficient way to update with LINQ to SQL Most efficient way to update with LINQ to SQL asp.net asp.net

Most efficient way to update with LINQ to SQL


I find following work around to this problem :

1) fetch and update entity (I am going to use this way because it's ok for me )

public int updateEmployee(App3_EMPLOYEE employee){    AppEmployeeDataContext db = new AppEmployeeDataContext();    App3_EMPLOYEE emp = db.App3_EMPLOYEEs.Single(e => e.PKEY == employee.PKEY);    emp.FIRSTNAME = employee.FIRSTNAME;//copy property one by one     db.SubmitChanges();    return employee.PKEY;}

2) disable ObjectTrackingEnabled as following

// but in this case lazy loading is not supported    public AppEmployeeDataContext() :                     base(global::LinqLibrary.Properties.Settings.Default.AppConnect3DBConnectionString, mappingSource)            {                this.ObjectTrackingEnabled = false;                OnCreated();            }

3) Detach all the related objects

partial class App3_EMPLOYEE{    public void Detach()    {        this._APP3_EMPLOYEE_EXTs = default(EntityRef<APP3_EMPLOYEE_EXT>);    }} public int updateEmployee(App3_EMPLOYEE employee){    AppEmployeeDataContext db = new AppEmployeeDataContext();    employee.Detach();    db.App3_EMPLOYEEs.Attach(employee,true);    db.SubmitChanges();    return employee.PKEY;}

4) use Time stamp in the column

 http://www.west-wind.com/weblog/posts/135659.aspx

5) Create stored procedure for updating your data and call it by db context


You cannot attach a modified entity to a DataContext when there is no RowVersion column. Instead you could store original entity in your application as long as maintaining a copy for data changes. Then when changes need to be saved you could attach original entity to a DataContext, change its values to match the modified entity values and submit changes.

Here is an example:

public int updateEmployee(App3_EMPLOYEE employee, App3_EMPLOYEE originalEmployee){    DBContextDataContext db = new DBContextDataContext();    db.App3_EMPLOYEEs.Attach(originalEmployee);    // TODO: Copy values from employee to original employee    db.SubmitChanges();    return employee.PKEY;}

Update:

There is a table in the database with columns ID, Name, Notes

// fetch an employee which will not be changed in the applicationEmployee original;using(var db = new TestDbDataContext()){  original = db.Employees.First(e => e.ID == 2);}// create an instance to work withvar modified = new Employee {ID = original.ID, Name = original.Name, Notes = original.Notes};// change some infomodified.Notes = string.Format("new notes as of {0}", DateTime.Now.ToShortTimeString());  // updateusing(var db = new TestDbDataContext()){  db.Employees.Attach(original);  original.Notes = modified.Notes;  db.SubmitChanges();}


There is a discussion on this topic here at MSDN srecommend you to use an IsVersion field and the Attach method