LINQ to SQL:强制更改表的时间戳

时间:2011-03-25 16:41:19

标签: c# sql linq linq-to-sql timestamp

我正在使用LINQ to SQL,并且在更新表中的时间戳列时需要一些帮助。

Car candidate = Context.Cars.Where(c => c.CarID == car.Id).SingleOrDefault();
candidate.CarName = carToUpdate.CarName;
candidate.CarDescription = carToUpdate.CarDescription;
candidate.IsActive = carToUpdate.IsActive;
candidate.IsCab = carToUpdate.IsCab;
candidate.StockTypeId = carToUpdate.StockTypeId;
Context.SubmitChanges();

如果car实体的属性没有变化,则时间戳不会更改。 (看起来LINQ to SQL非常智能,不能向数据库发送更新)。

无论如何都要将时间戳从LINQ更改为SQL ??

请帮忙。

感谢。

4 个答案:

答案 0 :(得分:0)

SQL表上的触发器不是一个选项吗?

编辑:我认为此主题会回答您的问题force LinqToSql to submit

答案 1 :(得分:0)

如何添加LastUpdatedDate列并将其设置为DateTime.Now,这应该确保它始终会进行更新,然后更改时间戳列。

答案 2 :(得分:0)

我认为答案是没有。

如果实体的属性在您修改它们之后是相同的,就像将实体从数据库中拉出一样,它实际上并没有改变。

当行实际上未更新时,强制生成新时间戳的目的是什么?

答案 3 :(得分:0)

我正在阅读Object States and Change-Tracking (LINQ to SQL),并说明:

  

您可以通过观察来检测更新   变更通知。   通过提供通知   属性中的PropertyChanging事件   setter方法。当LINQ to SQL被通知时   它对物体的第一次改变   创建对象的副本和   认为对象是候选对象   生成Update语句。

     

对于未实现的对象   INOTifyPropertyChanging,LINQ to SQL   维护值的副本   物品在它们第一时就有了   物化。你打电话的时候   SubmitChanges,LINQ to SQL比较   当前和原始值   决定对象是否已经存在   改变。

您是否可以创建一个部分类,该部分类添加一个调用PropertyChanging的属性来更新未映射的属性,因此只存在于代码中?