Объекты данных не отслеживают изменения. Отслеживание изменений происходит в DataContext и объектах, которые вы получили через DataContext. Таким образом, чтобы отслеживать изменения, вам нужно сделать следующее:
public class FooDataContext : DataContext
{
public Table<Order> Orders;
}
public class Order
{
[DbColumn(Identity = true)]
[Column(DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)]
public int Id { get; set; }
[DbColumn(Default = "(getutcdate())")]
[Column(DbType = "DateTime", CanBeNull = false, IsDbGenerated = true)]
public DateTime DateCreated { get; set; }
[Column(DbType = "varchar(50)", CanBeNull = false, IsDbGenerated = false)]
public string Name { get; set; }
}
Теперь в вашем коде вы можете сделать что-то вроде:
public void UpdateOrder(int id, string name)
{
FooDataContext db = new FooDataContext();
Order order = db.Orders.Where(o=>o.Id == id).FirstOrDefault();
if (order == null) return;
order.Name = name;
db.SubmitChanges();
}
Я бы не рекомендовал напрямую использовать контекст данных в коде, но это хороший способ начать работу с Linq To SQL. Я бы порекомендовал поместить все ваши взаимодействия с базой данных во внешний проект и вызывать из GUI классы, которые инкапсулируют это поведение.
Я бы порекомендовал создать файл Linq To Sql (dbml), если вы новичок в Linq To Sql.
Щелкните правой кнопкой мыши свой проект в обозревателе решений и выберите Добавить новый элемент. Выберите файл Linq To SQL, и он позволит вам подключиться к базе данных и выбрать таблицы.
Затем вы можете посмотреть на сгенерированный код и получить отличные идеи о том, как работает Linq To Sql и что вы можете с ним сделать.
Используйте это как руководство по работе с Linq to SQL, и это унесет вас далеко ...