今天这里很安静......好吧,如果有人也在寻找这样的解决方案,我已经找到了一种方法。
所以我们的主要问题是获取第一个表中新创建记录的id。如果我们能够做到这一点,那么我们只需将其提供给 next 方法,该方法在第二个表中创建相应的记录。
我使用了 DataSet Designer 来享受 VS 的代码自动生成功能。我们将第一个表称为 TripSets。在 DataSet Designer 中,右键单击 TripSetsTableAdapter,然后单击 Properties。展开 InsertCommand 属性组。这里我们需要做两件事。
首先,我们使用参数集合编辑器将一个新参数添加到参数集合中。设置 ParameterName = @TripId,DbType = Int32(或任何你需要的),Direction = Output。
其次,我们修改 CommandText(为方便起见,使用 Query Builder)。在命令的末尾添加一个分号,如下所示:
(...);
SELECT @TripId = SCOPE_IDENTITY()
所以你会得到类似这样的声明:
INSERT INTO TripSets
(Date, UserId)
VALUES
(@Date,@UserId);
SELECT @TripId = SCOPE_IDENTITY()
也许您会收到解析器错误警告,但您可以忽略它。现在配置了这个,我们可以在我们的业务逻辑代码中使用如下:
int tripId;
int result = tripSetsTableAdapter.Insert(tripDate, userId, out tripId);
// Here comes the insert method into the second table
tripSetTripSearchTableAdapter.Insert(tripId, amountPersons);
可能您会希望以某种方式同步这些操作(例如使用TransactionScope),但这完全取决于您。