Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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# 在提交更改()之前验证Linq2Sql_C#_.net_Linq_Linq To Sql_Validation - Fatal编程技术网

C# 在提交更改()之前验证Linq2Sql

C# 在提交更改()之前验证Linq2Sql,c#,.net,linq,linq-to-sql,validation,C#,.net,Linq,Linq To Sql,Validation,在调用SubmitChanges()之前,是否可以/如何在Linq2Sql中验证数据上下文中的更改。我的情况是创建一个上下文,执行多个操作,并在其他处理任务旁边添加许多插入,然后在提交失败时回滚 我更愿意在某些任务完成后进行某种“Validate()”调用,以便在提交整个作业之前处理它。要获取数据上下文中的所有更改,可以调用 ChangeSet changes = dataContext.GetChangeSet(); // An IList<Object> changes.Del

在调用SubmitChanges()之前,是否可以/如何在Linq2Sql中验证数据上下文中的更改。我的情况是创建一个上下文,执行多个操作,并在其他处理任务旁边添加许多插入,然后在提交失败时回滚


我更愿意在某些任务完成后进行某种“Validate()”调用,以便在提交整个作业之前处理它。

要获取数据上下文中的所有更改,可以调用

ChangeSet changes = dataContext.GetChangeSet();

// An IList<Object>
changes.Deletes;
changes.Inserts;
changes.Updates;
changesetchanges=dataContext.GetChangeSet();
//胆小鬼
更改。删除;
变更、插入;
更改。更新;
我拥有的是每个值对象都有一个validate方法。我使用attibutes来定义不同类型的验证。我手动执行此操作的原因是因为我在数据库和代码中有一个可能是int的数字,如果我保存一个年龄,1002的值可能无效。所以我可以给出一系列的值,等等

如果您的每个值对象都继承自一个基础对象,那么迭代它们就更容易了。假设您的基类上有一个Validate方法


我要指出的是,要使其工作,您必须编辑生成的代码,或者滚动您自己的值对象。我通常使用自己的函数,因为我是如何使用它们进行验证的。

您还可以将
OnValidate()
函数与LINQ to SQL实体的分部类一起使用<然后,在
SubmitChanges()
期间,但在将数据发送到数据库之前,将调用code>OnValidate()。
OnValidate()
的一个优点是,您可以通过
ChangeAction
枚举来区分CRUD操作

比如说,

public partial class YourEntity
{
    partial void OnValidate(System.Data.Linq.ChangeAction action)
    {
        if(action == System.Data.Linq.ChangeAction.Insert)
           // Do insert
        ... etc. ...
    }
}

以前从未注意过.GetChangeSet()方法!谢谢你+1我最终采用的实际方法是使用表名创建一个分部类,并在OnFooChanging()中为我要验证的字段实现验证代码。它可以在设置值时立即抛出异常,而不是在SubmitChanges()时抛出异常。我没有使用变更集,但它为我指明了正确的方向,而且无论如何都很方便。@Nick-我觉得告诉你这些没用,因为我记不起我在博客上读到的关于它的内容,但显然将验证与“OnChange”处理程序分开是个好主意,因为它允许复杂的验证场景,其中一项财产的有效性取决于其他财产的价值等。