2 回答

TA貢獻1852條經驗 獲得超1個贊
我不會使用標識來鏈接兩個表,而是使用 GUID 來鏈接它們。像這樣 :
var a= new DataTable("A");
DataColumn guid= new DataColumn("Guid", typeof(Guid));
billable.Columns.Add(Guid.NewGuid());
DataColumn id= new DataColumn("Id", typeof(int));
billablePriceMapId.AutoIncrement = true;
billable.Columns.Add(id);
DataColumn fee = new DataColumn("Fee", typeof(decimal));
billable.Columns.Add(fee);
DataColumn[] keys = new DataColumn[1];
keys[0] = id;
billable.PrimaryKey = keys;
然后為了孩子
var b= new DataTable("B");
DataColumn id= new DataColumn("Id", typeof(int));
billablePriceMapId.AutoIncrement = true;
billable.Columns.Add(id);
DataColumn parentId= new DataColumn("ParentGuid", typeof(Guid));
billable.Columns.Add(parentGuid);
DataColumn[] keys = new DataColumn[1];
keys[0] = id;
billable.PrimaryKey = keys;
這意味著您在插入之前知道鏈接將是什么,在生成標識之前。

TA貢獻1854條經驗 獲得超8個贊
SqlBulkCopy不返回標識值。因此,除非您的表A有另一個唯一列(例如“代碼”)以允許完善SELECT,否則您將無法檢索生成的標識值。
免責聲明:我是Bulk Operations項目的所有者
這個庫不是免費的,但允許輸出標識值。它在引擎蓋下SqlBulkCopy使用Temporary Table以允許此功能
using (var bulkCopy = new BulkOperation(connection))
{
bulkCopy.Transaction = transaction;
bulkCopy.DestinationTableName = "dbo.A";
bulkCopy.ColumnMappings.Add("Id", ColumnMappingDirectionType.Output);
bulkCopy.ColumnMappings.Add("Col1");
bulkCopy.ColumnMappings.Add("Col2");
bulkCopy.BulkInsert(a);
// Copy identity value in `Id` from table A to `ParentId` in table B
// ...code...
}
- 2 回答
- 0 關注
- 176 瀏覽
添加回答
舉報