数据对象不跟踪更改。更改跟踪发生在 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 的新手,我建议您创建一个 Linq To Sql (dbml) 文件。
在解决方案资源管理器中右键单击您的项目,然后选择添加新项目。选择 Linq To SQL 文件,然后它将让您连接到数据库并选择表。
然后,您可以查看生成的代码,并获得一些关于 Linq To Sql 如何工作以及您可以用它做什么的好主意。
使用它作为使用 Linq to SQL 的指导方针,这将带你走得更远......