将数据从asp.net表单插入到具有外键约束的sql数据库中

时间:2010-08-06 17:29:16

标签: asp.net data-binding

我有两张桌子 资产员工

assetid-pk empid-pk EMPID-FK 现在,我有一个表单来填充资产表但由于外键约束而无法使用..

该怎么办?

THX Tk的

3 个答案:

答案 0 :(得分:3)

创建外键是有充分理由的 - 至少可以防止孤立行。创建相应的父级,然后使用适当的值作为子表上的外键值。

答案 1 :(得分:0)

您应该将此更新视为一系列SQL语句,而不仅仅是一个语句。您将按依赖顺序处理语句,请参阅示例。

Asset
  PK AssetID
     AssetName
  FK EmployeeID
  etc...

Employee
  PK EmployeeID
     EmployeeName
  etc...

如果您想“添加”新资产,您首先需要知道将分配给哪个员工。如果将其分配给新员工,则需要先添加它们。

以下是为名为“Zach”的新员工添加名为“BOOK”的资产的示例。

DECLARE @EmployeeFK AS INT;

INSERT (EmployeeName) VALUES ('Zach') INTO EMPLOYEE;
SELECT @EmployeeFK = @@IDENTITY;
INSERT (AssetName, EmployeeID) VALUES ('BOOK',@EmployeeFK) INTO ASSET;

上面要注意的重要一点是,我们获取了分配给'Zach'的新身份(又名:EmployeeID),因此我们可以在添加新资产时使用它。

答案 2 :(得分:0)

如果我理解正确,您是否尝试在持久保存数据之前在本地构建数据图?也就是说,在应用程序中创建父记录和子记录并立即保留它们?

有几种方法可以解决这个问题。人们采用的一种方法是使用GUID作为数据的唯一标识符。这样您就不需要从数据库中获取下一个ID,您只需在本地创建图形并保留整个图形。很长一段时间以来,软件和数据库之间的这种方法一直存在争论,因为虽然它在很多方面都很有意义(不经常访问数据库,在持久化之前保持关系,在系统中唯一地识别数据)但事实证明是数据库中的重要资源。

另一种方法是使用ORM来处理持久性映射。比如NHibernate之类的东西。您将创建父对象,子对象将只是该对象的属性。它们没有任何外键和ID的概念等等,它们只是通过相互设置属性而成为相关代码中的对象(例如带有“注释”对象的泛型集合的“博客帖子”对象)等)。该图将被移交给ORM,ORM将使用其对象和持久性之间的映射知识以正确的顺序将其发送到数据库,可能返回相同的对象但填充了ID号。

或者这不是你问的问题?说实话,这有点不清楚。