在SubmitChanges()之前验证Linq2Sql

时间:2009-07-31 14:07:11

标签: c# .net linq linq-to-sql validation

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

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

2 个答案:

答案 0 :(得分:6)

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

ChangeSet changes = dataContext.GetChangeSet();

// An IList<Object>
changes.Deletes;
changes.Inserts;
changes.Updates;

我所拥有的是每个值对象都有一个验证方法。我使用attibutes来定义不同类型的验证。我手动执行此操作的原因是因为我有一个数字可能是数据库中的int和代码,如果我保存年龄,则值1002可能无效。所以我可以给出一系列的价值观等等。 。

如果每个值对象都从基础对象继承,则可以更轻松地迭代它们。假设您的基类上有Validate方法。

我想指出这个工作,你将不得不编辑生成的代码,或者滚动你自己的值对象。我通常会自行推出,因为我将它们用于验证。

答案 1 :(得分:5)

您还可以将OnValidate()函数与LINQ-to-SQL Entity的分部类一起使用。然后在OnValidate()期间但在数据发送到数据库之前调用SubmitChanges()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. ...
    }
}