数据集和自引用关系插入异常

时间:2012-11-16 01:00:24

标签: c# sql sql-server dataset foreign-keys

我正在使用带有MSSQL后端的c#数据集。我有一个引用自己的表。当我添加一个父行然后添加一个子进程,而不在其间调用更新我得到一个约束异常。我认为这是因为插入没有以添加实体的相同顺序执行。这有什么方法吗?我希望用户能够添加项目,然后在最后提交到数据库(当他们确认它是正确的时)。

这是我的表定义和示例应用程序:

CREATE TABLE [dbo].[AssetServiceItems] (
    [ServiceItemID] [int] IDENTITY(1, 1) NOT NULL,
    [Description] [nvarchar](50) NOT NULL,
    [Parent] [int] NULL,
    CONSTRAINT [PK_AssetServiceItems] PRIMARY KEY CLUSTERED ([ServiceItemID] ASC) WITH (
        PAD_INDEX = OFF,
        STATISTICS_NORECOMPUTE = OFF,
        IGNORE_DUP_KEY = OFF,
        ALLOW_ROW_LOCKS = ON,
        ALLOW_PAGE_LOCKS = ON
        ) ON [PRIMARY]
    ) ON [PRIMARY]

ALTER TABLE [dbo].[AssetServiceItems]
    WITH CHECK ADD CONSTRAINT [AssetServiceItems_parent] FOREIGN KEY ([Parent]) REFERENCES [dbo].[AssetServiceItems]([ServiceItemID])

ALTER TABLE [dbo].[AssetServiceItems] CHECK CONSTRAINT [AssetServiceItems_parent]

和程序......

public static void Main(string[] args)
{

  RelTestTableAdapters.AssetServiceItemsTableAdapter adapter = new RelTestTableAdapters.AssetServiceItemsTableAdapter();
  RelTest dataSet = new RelTest();

  var parent =  dataSet.AssetServiceItems.NewAssetServiceItemsRow();
  parent.Description = "Parent";
  dataSet.AssetServiceItems.AddAssetServiceItemsRow(parent);

  var child = dataSet.AssetServiceItems.NewAssetServiceItemsRow();
  child.Description = "child";
  child.SetParentRow(parent);
  dataSet.AssetServiceItems.AddAssetServiceItemsRow(child);

  adapter.Update(dataSet);

    Console.ReadKey(true);
}
  

INSERT语句与FOREIGN KEY SAME TABLE冲突   约束“AssetServiceItems_parent”。冲突发生在   数据库“RelTest”,表“dbo.AssetServiceItems”,列   'ServiceItemID'。

0 个答案:

没有答案