【发布时间】:2011-04-12 09:59:00
【问题描述】:
我对 DAO 和 SQL Server 有点陌生,当我尝试将值插入到两个具有关系的表中时遇到了问题。表Photos 有一个gpsId 字段,它与GPSLocations 表的id 字段具有外键关系。我想创建一个链接到新 GPSLocation 的新照片条目,因此代码如下所示:
gpsRow = dataset.GPSLocations.AddGPSLocationsRow("0.0N", "3.2W");
dataset.Photos.AddPhotosRow(@"c:\path\file.jpg", gpsRow);
tableAdapterManager.UpdateAll(dataset);
但是这会导致以下错误:
无法插入外键值 因为对应的主键 值不存在。 [外键 约束名称 = photoToGps ]
我正在使用 SQL Server CE。我的理解是否正确,TableAdapterManager 应该处理这个分层更新?我只是将这些表拖到 XSD 视图上,并依靠它自动创建的包装类。我是否需要更改关系的任何内容(例如,使其成为外键约束)?我注意到在某些情况下,gps id 是正数,有时是负数,这是否相关?
编辑: 我还确保将更新属性设置为 CASCADE,这会导致相同的错误。分层更新设置为true,设计器中两个表之间存在外键约束。
【问题讨论】:
-
也许我们需要更多信息。我假设 GPSLocations 表中的第三个字段是 id 字段并被标记为主键。它不是身份字段是否有原因?为什么照片没有 id 字段(这可能与您的问题无关,我只是想更多地了解架构)。
-
抱歉,第三个字段具有误导性,因此我已将其删除,它只是一个数据成员,而不是身份。 GPSLocations 表有一个标识列
id(也是主键),它与Photos表的gpsId列有关系
标签: c# sql-server visual-studio-2008 sql-server-ce dao