如何强制Linq更新一行的最后编辑时间?

时间:2009-08-18 11:49:46

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

在数据库中,我有一个datetime类型的LastEditTime列。我用它来跟踪最后一行更新/插入时间。 Linq抛出异常,声称它不能在该列插入null。

当然,由于LastEditTime列为NOT NULL,因此需要例外。我的手生成查询插入getutcdate()。我如何要求Linq做类似的事情?

3 个答案:

答案 0 :(得分:2)

创建任何表的部分类。在partial类中有以下内容:

public partial class MyTable{

    partial void OnValidate(System.Data.Linq.ChangeAction action)
    {
        LastEditTime = DateTime.Now;
    }
}

在执行database.submitchanges()

之前总是调用OnValidate

答案 1 :(得分:1)

最简单的答案是为数据库中的字段分配默认值,即getdate()。这将确保该字段填充当前时间/日期,但前提是它是空白的。

Linq to SQL只是SQL上的一个访问层,因此在这方面相当愚蠢,你需要自己制作Linq to SQL类,或者确保在创建对象实例时填充值您正在添加到数据库。

如果您正在寻找可以自动更新的内容以确保每次更新记录时的并发性,那么请查看时间戳字段类型。

答案 2 :(得分:0)

您可以在数据库中创建触发器并将其分配给更新操作。我知道它有效,我们一直在Postgres数据库上这样做。

我不知道SQL Server是否有触发器,但您可以使用存储过程。