Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将本地实体合并到表中,跳过主键(linq2db)_Sql Server_Linq2db - Fatal编程技术网

Sql server 将本地实体合并到表中,跳过主键(linq2db)

Sql server 将本地实体合并到表中,跳过主键(linq2db),sql-server,linq2db,Sql Server,Linq2db,我想使用linq2db将本地实体列表合并到一个表中(如果它们还不存在的话) 我试着做到以下几点: var recordsConvertedToOrders = reportRecords.Select(i => { // some predefined conversion var order = mapper.Map<Order>(i); order.Created = DateTime.Now; return order; }); usi

我想使用linq2db将本地实体列表合并到一个表中(如果它们还不存在的话)

我试着做到以下几点:

var recordsConvertedToOrders = reportRecords.Select(i =>
{
    // some predefined conversion
    var order = mapper.Map<Order>(i);
    order.Created = DateTime.Now;
    return order;
});


using (var db = new DataConnection("StuckOrders"))
{
    var count = await db.GetTable<Order>()
        .Merge()
        .Using(recordsConvertedToOrders)
        .On((t, s) => t.OrderlineID == s.OrderlineID)
        .InsertWhenNotMatched()
        .MergeAsync();
}
这是因为生成了以下SQL

(注意,
0
被传递给
Id
,然后与
INSERT
一起插入到表中。)

这是我的
订单
模型,由linq2db生成:

[Table(Schema="dbo", Name="Order")]
public partial class Order
{
    [Column(), PrimaryKey,  Identity] public long Id { get; set; } // bigint
    ...
我希望在
MERGE
SQL中跳过
Id
s,以便将它们生成为正常的增量标识值

我最终指定了手动插入的字段(我不喜欢这样,因为它重复了我们的AutoMapper映射):

使用(var db=newdataconnection(“StuckOrders”))
{
var count=await db.GetTable()
.Merge()
.使用(报告记录)
.On((t,s)=>t.OrderlineID==s.OrderlineID)
.InsertWhenNotMatched(s=>新订单
{
OrderId=s.OrderId,
OrderItemId=s.OrderItemId,
OrderItemCode=s.OrderItemCode,
//OrderCode=s.OrderCode,
ProductionTicketID=s.ProductionTicketID,
OrderDateTime=s.OrderDateTime,
OrderDate=s.OrderDate,
UploadEndDateTime=s.UploadEndDateTime,
OrderlineID=s.OrderlineID.Value,
ProductContentStatusName=s.ProductContentStatusName,
ProductContentStatusDate=s.ProductContentStatusDate,
日期=s.日期,
checknotinfullimentflow=s.check\u notIn\u fullimentflow,
CheckNotInPlantFromOrderDomain=s.check\u notIn\u PlantFromOrderDomain,
CheckNotInFulfillment=s.check\u notinfulfillment,
CheckNotInPlantFromFulfillment=s.check\u notIn\u PlantFromFulfillment,
检查凭证=s.检查凭证,
CheckExternalVendors=s.check\u ExternalVendors,
CheckNotInWaiting=s.check\u notinwaiting,
CheckDescription=s.CheckDescription,
ProductContentID=s.ProductContentID,
EditorName=s.EditorName,
Created=DateTime。现在,
})
.MergeAsync();
}
如何使第一个代码段按预期工作?

也发布为
-- StuckOrders SqlServer.2012 (asynchronously)
SET IDENTITY_INSERT [dbo].[Order] ON
MERGE INTO [dbo].[Order] [Target]
USING
(
        VALUES
        (0,9369660,13869511,N'BP1328147327',NULL,NULL,NULL,'2017-11-08T23:08:54','2017-11-08','2017-11-08T23:08:00',18302384,N'LinkedProductToProductContent',NULL,'2017-11-16T09:24:14.300',0,0,0,0,0,0,0,N'3. orderitem (FFApi) not in FulfilmentOrderlines',15829191,N'Windows Editor',0,NULL,NULL,'2017-11-16T13:28:10.866',NULL),
        (0,9308332,13792138,N'NO1320410131',NULL,NULL,NULL,'2017-11-04T22:58:49','2017-11-04','2017-11-04T22:57:00',18193864,N'FailedFinalizerJob',NULL,'2017-11-16T09:24:14.300',0,0,0,0,0,0,0,N'1. orderitem not in fulfilmentflow',15745587,N'Prints Editor',0,NULL,NULL,'2017-11-16T13:28:10.896',NULL)
) [Source] ([c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7], [c8], [c9], [c10], [c11], [c12], [c13], [c14], [c15], [c16], [c17], [c18], [c19], [c20], [c21], [c22], [c23], [c24], [c25], [c26], [c27], [c28])
ON ([Target].[OrderlineID] = [Source].[c10])

WHEN NOT MATCHED THEN
INSERT
(
        [Id],
        [OrderId],
        [OrderItemId],
        [OrderItemCode],
        [OrderCode],
        [CopyItemCode],
        [ProductionTicketID],
        [OrderDateTime],
        [OrderDate],
        [UploadEndDateTime],
        [OrderlineID],
        [ProductContentStatusName],
        [ProductContentStatusDate],
        [Date],
        [check_notIn_FulfillmentFlow],
        [check_notIn_PlantFromOrderDomain],
        [check_notIn_Fulfillment],
        [check_notIn_PlantFromFulfillment],
        [check_Vouchers],
        [check_ExternalVendors],
        [check_notIn_Waiting],
        [CheckDescription],
        [ProductContentID],
        [EditorName],
        [Resolved],
        [FixOrdersJira],
        [RootCauseJira],
        [Created],
        [Updated]
)
VALUES
(
        [Source].[c0],
        [Source].[c1],
        [Source].[c2],
        [Source].[c3],
        [Source].[c4],
        [Source].[c5],
        [Source].[c6],
        [Source].[c7],
        [Source].[c8],
        [Source].[c9],
        [Source].[c10],
        [Source].[c11],
        [Source].[c12],
        [Source].[c13],
        [Source].[c14],
        [Source].[c15],
        [Source].[c16],
        [Source].[c17],
        [Source].[c18],
        [Source].[c19],
        [Source].[c20],
        [Source].[c21],
        [Source].[c22],
        [Source].[c23],
        [Source].[c24],
        [Source].[c25],
        [Source].[c26],
        [Source].[c27],
        [Source].[c28]
)
;
SET IDENTITY_INSERT [dbo].[Order] OFF
[Table(Schema="dbo", Name="Order")]
public partial class Order
{
    [Column(), PrimaryKey,  Identity] public long Id { get; set; } // bigint
    ...
using (var db = new DataConnection("StuckOrders"))
{
    var count = await db.GetTable<Order>()
        .Merge()
        .Using(reportRecords)
        .On((t, s) => t.OrderlineID == s.OrderLineId)
        .InsertWhenNotMatched(s => new Order
        {
            OrderId = s.OrderId,
            OrderItemId = s.OrderItemId,
            OrderItemCode = s.OrderItemCode,
            //OrderCode = s.OrderCode,
            ProductionTicketID = s.ProductionTicketId,
            OrderDateTime = s.OrderDateTime,
            OrderDate = s.OrderDate,
            UploadEndDateTime = s.UploadEndDateTime,
            OrderlineID = s.OrderLineId.Value,
            ProductContentStatusName = s.ProductContentStatusName,
            ProductContentStatusDate = s.ProductContentStatusDate,
            Date = s.Date,
            CheckNotInFulfillmentFlow = s.check_notIn_FulfillmentFlow,
            CheckNotInPlantFromOrderDomain = s.check_notIn_PlantFromOrderDomain,
            CheckNotInFulfillment = s.check_notIn_Fulfillment,
            CheckNotInPlantFromFulfillment = s.check_notIn_PlantFromFulfillment,
            CheckVouchers = s.check_Vouchers,
            CheckExternalVendors = s.check_ExternalVendors,
            CheckNotInWaiting = s.check_notIn_Waiting,
            CheckDescription = s.CheckDescription,
            ProductContentID = s.ProductContentID,
            EditorName = s.EditorName,
            Created = DateTime.Now,
        })
        .MergeAsync();
}