使用外键约束将数据从asp.net表单插入sql数据库

使用外键约束将数据从asp.net表单插入sql数据库,asp.net,data-binding,Asp.net,Data Binding,我有两张桌子 资产员工 assetid pk empid pk empid-fk 现在,我有一个表单来填充资产表,但由于外键约束,它无法填充 怎么办 thx Tk创建外键有一个很好的理由——至少可以防止孤立行。创建相应的父表,然后使用适当的值作为子表上的外键值。创建外键有一个很好的理由-至少可以防止孤立行。创建相应的父表,然后使用适当的值作为子表上的外键值。您应该将此更新视为一系列SQL语句,而不仅仅是一条语句。您将按照依赖关系的顺序处理这些语句,请参见示例 Asset PK AssetID

我有两张桌子 资产员工

assetid pk empid pk empid-fk 现在,我有一个表单来填充资产表,但由于外键约束,它无法填充

怎么办

thx
Tk

创建外键有一个很好的理由——至少可以防止孤立行。创建相应的父表,然后使用适当的值作为子表上的外键值。

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

您应该将此更新视为一系列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”的新标识(aka:EmployeeID),以便在添加新资产时使用它。

您应该将此更新视为一系列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”的新标识(aka:EmployeeID),以便在添加新资产时使用它。

如果我理解正确,您是否尝试在保存数据之前在本地构建数据图?也就是说,在应用程序中创建父记录和子记录,并一次保存所有记录

有几种方法可以做到这一点。人们采用的一种方法是使用guid作为数据的唯一标识符。这样,您就不需要从数据库中获取下一个ID,您只需在本地创建图形并持久化整个过程。关于这种方法,软件和数据库之间的争论由来已久,因为虽然它在许多方面都很有意义(较少地访问数据库,在持久化之前维护关系,在系统之间唯一地标识数据),但它却对数据库造成了重大的资源损失

另一种方法是使用ORM为您处理持久性映射。比如说像NHibernate之类的东西。您将创建父对象,子对象将只是该对象上的属性。它们没有外键和ID之类的概念,它们只是代码中相互关联的对象,被设置为彼此的属性(例如带有“comment”对象的一般集合的“blog post”对象,等等)。该图将被传递给ORM,ORM将使用其关于对象和持久性之间映射的知识,以正确的顺序将其发送到数据库,可能会返回相同的对象,但会填充ID号


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

如果我理解正确,您是否试图在保存数据之前在本地构建数据图?也就是说,在应用程序中创建父记录和子记录,并一次保存所有记录

有几种方法可以做到这一点。人们采用的一种方法是使用guid作为数据的唯一标识符。这样,您就不需要从数据库中获取下一个ID,您只需在本地创建图形并持久化整个过程。关于这种方法,软件和数据库之间的争论由来已久,因为虽然它在许多方面都很有意义(较少地访问数据库,在持久化之前维护关系,在系统之间唯一地标识数据),但它却对数据库造成了重大的资源损失

另一种方法是使用ORM为您处理持久性映射。比如说像NHibernate之类的东西。您将创建父对象,子对象将只是该对象上的属性。它们没有外键和ID之类的概念,它们只是代码中相互关联的对象,被设置为彼此的属性(例如带有“comment”对象的一般集合的“blog post”对象,等等)。该图将被传递给ORM,ORM将使用其关于对象和持久性之间映射的知识,以正确的顺序将其发送到数据库,可能会返回相同的对象,但会填充ID号


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

我们可以用通用格式的Insert语句吗?我们可以用通用格式的Insert语句吗?