I struggled yesterday with saving modified entities back to the database after they were disconnected from their original DataContext. After much googling, I found the way forward is to ensure you have a version column in your database with a timestamp datatype, and map this with a Binary field in your mapping metadata. Then you can call an overload of Attach.
A complete working example below, as simple as I can make it. Hope that helps somebody.
using System.Data.Linq; using System.Data.Linq.Mapping; using System.Linq; using NUnit.Framework; namespace CustomerSaver { [TestFixture] public class Class1 { [Test] public void TrySaveCustomer() { const string connectionString = @"server=.\SqlExpress; database=test;trusted_connection=true"; Customer customer; using(DataContext readContext = new DataContext(connectionString)) { customer = readContext.GetTable().First(); } customer.Name = customer.Name + "."; using (DataContext saveContext = new DataContext(connectionString)) { saveContext.GetTable().Attach( customer, true ); saveContext.SubmitChanges(); } } } [Table(Name="Customers")] public class Customer { [Column(IsPrimaryKey = true)] public int Id { get; set; } [Column] public string Name { get; set; } [Column(IsVersion = true, IsDbGenerated = true)] public Binary Version { get; set; } //timestamp column in sql server } }