【问题标题】:ADO.NET DataSet - Have a UniqueConstraint for Columns from Different TablesADO.NET 数据集 - 对来自不同表的列具有唯一约束
【发布时间】:2010-12-10 22:34:07
【问题描述】:

我正在 Visual Studio 2008 中的 .NET 3.5 中用 C# 编写程序。我有一个包含两个数据表 A 和 B 的数据集。表 A 中是 DataColumn Y,表 B 中是 Z 列,以及更多列两张桌子。 Y 列和 Z 列都设置为唯一的、自动递增的列。

我希望 Y 和 Z 在两者之间也是独一无二的。如,如果表 A 已经有一行在 Y 列中有一个 3,并且我在表 B 中创建一个新行并且它想在该新行的 Z 列中放置一个 3,它将改为跳过 3并输入一个 4.

我尝试了一些看起来应该可行的方法:

myDataSet.Tables["A"].Constraints.Add(new UniqueConstraint(new DataColumn[] { myDataSet.Tables["A"].Columns["Y"], myDataSet.Tables["B"].Columns["Z"] }));
myDataSet.Tables["B"].Constraints.Add(new UniqueConstraint(new DataColumn[] { myDataSet.Tables["A"].Columns["Y"], myDataSet.Tables["B"].Columns["Z"] }));

但是,如果我运行应用程序并获取该代码,我会在第一行收到以下错误:

System.Data.InvalidConstraintException 未处理
Message="无法从属于不同表的列创建键。"
Source="System.Data"

我将相同的 UniqueConstraint 添加到两个表的原因是,我不太确定在哪里放置它以使其处于活动状态。我宁愿不将这些表合二为一,因为除了 Y 列和 Z 列之外,它们之间几乎没有任何关系。

有没有人知道有什么方法可以做到这一点? MSDN 文档没有提到多个表,而且看起来没有其他人尝试过这个。


我已经解决了这个问题。在我的程序中,我已经使用了一些外键检查来跟踪我正在处理的表。我原以为从现在开始换一种方式可能会更容易,但我决定保留我目前的技术(在需要的地方稍微扩展一下,比如在我的程序的其他组件中放置更详细的身份信息),而且它是结果证明效果很好。

我最终所做的并不能真正解决我在这里发布的问题。我向希望在这里得到答案的 Google 员工道歉。

【问题讨论】:

    标签: c# .net dataset unique-constraint


    【解决方案1】:

    MSDN documentation 特别提到了一个 DataTable:

    UniqueConstraint 对象,它可以 分配给单个列 或一个列 的数组 数据表(强调我的)

    我认为您无法让 DataTable 为您强制执行此操作,您必须手动强制执行该行为。

    【讨论】:

    • 当我读到它时不知何故错过了它。是的,我确实可以手动完成。奇怪的是 DataSet 没有办法为您强制执行此操作,因为我认为这很常见。我可以创建一个新表,其唯一目的是拥有一个自动递增的列,并将新行从那里反映到我要添加到的任何表中。
    • @pgn674:您将如何在真实数据库中执行此操作?这并不常见。
    猜你喜欢
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多