Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq to sql-如何在插入/更新时自动捕获用户Id和更新日期时间?_C#_.net_Linq To Sql_Data Access - Fatal编程技术网

C# Linq to sql-如何在插入/更新时自动捕获用户Id和更新日期时间?

C# Linq to sql-如何在插入/更新时自动捕获用户Id和更新日期时间?,c#,.net,linq-to-sql,data-access,C#,.net,Linq To Sql,Data Access,我目前正试图找到一种更好的方法来自动捕获执行插入或更新时所做的更改。我们需要跟踪记录更改的最后日期时间以及执行更新/插入的用户的用户ID 在LINQtoSQL中有没有一种优雅的方法可以做到这一点?目前,我们已经为所有需要调用的(部分)类添加了一个Save方法,但这会造成问题,因为并非所有开发人员都记得使用Save方法,并且仍在使用上下文进行数据访问操作 此外,如果我们可以帮助的话,我们希望将此逻辑排除在数据库之外。不要在分部类上创建save方法,而是实现OnValidate方法并在那里设置属性

我目前正试图找到一种更好的方法来自动捕获执行插入或更新时所做的更改。我们需要跟踪记录更改的最后日期时间以及执行更新/插入的用户的用户ID

在LINQtoSQL中有没有一种优雅的方法可以做到这一点?目前,我们已经为所有需要调用的(部分)类添加了一个Save方法,但这会造成问题,因为并非所有开发人员都记得使用Save方法,并且仍在使用上下文进行数据访问操作


此外,如果我们可以帮助的话,我们希望将此逻辑排除在数据库之外。

不要在分部类上创建save方法,而是实现OnValidate方法并在那里设置属性

public partial class MyClass
{
    partial void OnValidate(System.Data.Linq.ChangeAction action)
    {
        if (action == System.Data.Linq.ChangeAction.Insert)
        {
            LastUpdated = DateTime.Now;
            ChangedBy = "Me!";
        }

    }
}

提交datacontext时会自动为您调用此方法。

如何让用户访问此方法?取决于您的应用程序。你说这是一个网络应用,所以我会从会议上想象这不是我的应用。但是通常linq to sql类位于数据层,并且没有访问会话的权限……您可以在OnValidate()方法中抛出异常,因此如果开发人员错误地调用了save方法,则会告诉他们。