ADO.Net中ForeignKeyConstraint类的AcceptRejectRule属性的作用是什么?

MSDN文档(对我而言)没有足够的解释以使其目的明确。阅读文档后,我认为将属性设置为None将阻止级联从父表到子表的任何更改。但是,在运行以下代码后,此假设被证明是错误的:

       DataTable table1 = new DataTable("Customers");

        table1.Columns.Add(new DataColumn("CustomerID", typeof(int)));
        table1.Columns.Add(new DataColumn("CustomerName", typeof(string)));

        DataTable table2 = new DataTable("Orders");
        table2.Columns.Add(new DataColumn("OrderID", typeof(int)));
        table2.Columns.Add(new DataColumn("CustomerID", typeof(int)));

        DataSet dataSet = new DataSet();
        dataSet.Tables.AddRange(new DataTable[] { table1, table2 });
        dataSet.EnforceConstraints = true;

        DataRelation dataRelation = new DataRelation("CustomerOrders", table1.Columns["CustomerID"],
            table2.Columns["CustomerID"], true);
        dataSet.Relations.Add(dataRelation);

        Debug.WriteLine("No. of constaints in the child table = {0}", table2.Constraints.Count);

        dataRelation.ChildKeyConstraint.AcceptRejectRule = AcceptRejectRule.None;
        dataRelation.ChildKeyConstraint.DeleteRule = Rule.Cascade;
        dataRelation.ChildKeyConstraint.UpdateRule = Rule.Cascade;

        table1.Rows.Add(new object[] { 11, "ABC" });
        table1.Rows.Add(new object[] { 12, "XYZ" });

        table2.Rows.Add(new object[] { 51, 12 });
        table2.Rows.Add(new object[] { 52, 11 });
        table2.Rows.Add(new object[] { 53, 11 });

        table1.Rows.RemoveAt(0);
        table1.AcceptChanges();
        table2.AcceptChanges();

        Debug.WriteLine("No of rows in the parent table = {0}", table1.Rows.Count);
        Debug.WriteLine("No of rows in the child table = {0}", table2.Rows.Count);


上面代码的输出是:

子表中的内容数= 1
父表中的行数= 1
子表中的行数= 1

谢谢,
Dinesh

最佳答案

为避免级联,需要将DeleteRuleUpdateRule设置为Rule.None

我不确定,但是我相信AcceptRejectRule仅会影响accept / reject命令本身是否是级联的。在您的代码中,我猜想这些更改已经被级联了(因为这是设置DeleteRuleUpdateRule的方式),但是仅接受了table1上的更改。 table2上的更改尚未被接受。

关于c# - ADO.Net中ForeignKeyConstraint.AcceptRejectRule的目的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10719977/

10-09 09:30