【问题标题】:Inserting Rows in Relationship using a Strongly Typed DataSet使用强类型数据集在关系中插入行
【发布时间】:2009-08-25 12:51:40
【问题描述】:

我在 C# (.NET 3.5) 中使用带有强类型数据集的 ADO.NET。我想在 1:n 关系中相关的两个表中插入一个新行。

Attachments 保存关系的主键部分,表LicenseAttachments 保存外键部分。

AttachmentsDataSet.InvoiceRow invoice; // Set to a valid row, also referenced in InvoiceAttachments
AttachmentsDataSet.AttachmentsRow attachment;
attachment = attachmentsDataSet.Attachments.AddAttachmentsRow("Name", "Description");
attachmentsDataSet.InvoiceAttachments.AddInvoiceAttachmentsRow(invoice, attachment);

当然,当我第一次更新 InvoicesAttachments 表时,我会从 SQL 服务器获得外键违规,所以我尝试先更新 Attachments 表,这将创建行,但会删除附件InvoiceAttachments 表中的关联。为什么?

我该如何解决这个问题?

【问题讨论】:

  • 请注意...当我使用强类型数据集时,每次实例化它时都会受到巨大的性能影响。
  • 是的,我知道这一点。你用什么代替?只需键入数据集?
  • @Manuel:您的强类型数据集是否与我在我的 asp.net 项目数据集中找到的数据集相同,您是否有自动生成的表格适配器或手动创建它们?跨度>
  • @Breadtruck:是的,我使用自动生成的 DataSet 和 TableAdapters。
  • @Manuel:如果您的表有很多记录(超过几百条),请确保您永远不要让您的表适配器 GetData 拉整个表,然后输入 @column = @columnvalue 所以您只返回要使用的行,而不是整个表。

标签: c# .net database ado.net strongly-typed-dataset


【解决方案1】:

在表之间的关系上,确保选择“关系和外键约束”,并将“更新规则”设置为“级联”。结合适配器上的“刷新数据表”选项,插入父行后,更新后的 ID 将“级联”关系,防止数据集中的外键违规。然后,您的子表将准备好正确插入数据库。

【讨论】:

    【解决方案2】:

    一些尝试:

    当你配置tableadapter时,你是否点击了高级选项,并勾选了“刷新数据表”以便它会检索到标识列的值?

    对我来说,有时我要么忘记检查它,要么没有正确保存配置,因为无论出于何种原因我都没有设置表标识增量/种子。你在桌子上使用身份增量吗?

    您也可以考虑为这两个表重新创建适配器。

    通常当我回顾所有事情时,我发现这对我来说是愚蠢的。

    最后,您可以考虑在 Primary 表上调用 update,然后在插入子记录时手动获取主键值并手动设置该值。如果这没有意义,请告诉我,我会发布代码。

    【讨论】:

      【解决方案3】:

      您需要告诉父表的表适配器刷新 更新操作后的数据表。 您可以这样做。

      1. 打开 ProgramUserGroupTableAdapter 的属性 -> 默认选择查询 -> 高级选项。并勾选刷新数据表选项。现在保存适配器。现在,当您在 table-adapter 上调用 update 时,数据表将在更新操作后更新[刷新],并将反映数据库表中的最新值。 如果主键或任何列设置为自动递增,则数据表将具有最近更新后的最新值。

      2. 现在您可以将更新称为 pug.Update(dsUserGroup.ProgramUserGroup);

      3. 从 ProgramUserGroup 列中读取最新值,并在更新前将各自的值分配到子表中。这将完全按照您想要的方式工作。

      alt text http://ruchitsurati.net/files/tds1.png

      【讨论】:

        猜你喜欢
        • 2010-12-21
        • 2011-09-12
        • 2012-04-09
        • 1970-01-01
        • 2017-06-25
        • 2015-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多