繁体   English   中英

实体框架的 BulkSaveChanges 错误

[英]Error on BulkSaveChanges with Entity Framework

我正在尝试使用 Entity Framework Classic 来批处理SaveChanges()操作与BulkSaveChanges

它对某些记录成功,但对其他记录失败(我一直在分解对单个操作的调用,并且我已经运行了分析器)。

使其失败的操作是:

exec sp_executesql N'CREATE TABLE #ZZZProjects_26190111_a15e_47d7_b253_2cc24510b3f8z ( [$action] VARCHAR(100) NULL, ZZZ_Index INT NULL, [Id] [sys].[int] NULL );
MERGE INTO [dbo].[MyEntityContact]  AS DestinationTable
USING
(
SELECT TOP 100 PERCENT * FROM (SELECT @0_0 AS [externalField], @0_1 AS [MyEntityId], @0_2 AS [CreatedDate], @0_3 AS [UpdateUser], @0_4 AS [UpdateDate], @0_5 AS [Id], @0_6 AS ZZZ_Index
UNION ALL SELECT @1_0 AS [externalField], @1_1 AS [MyEntityId], @1_2 AS [CreatedDate], @1_3 AS [UpdateUser], @1_4 AS [UpdateDate], @1_5 AS [Id], @1_6 AS ZZZ_Index
UNION ALL SELECT @2_0 AS [externalField], @2_1 AS [MyEntityId], @2_2 AS [CreatedDate], @2_3 AS [UpdateUser], @2_4 AS [UpdateDate], @2_5 AS [Id], @2_6 AS ZZZ_Index
UNION ALL SELECT @3_0 AS [externalField], @3_1 AS [MyEntityId], @3_2 AS [CreatedDate], @3_3 AS [UpdateUser], @3_4 AS [UpdateDate], @3_5 AS [Id], @3_6 AS ZZZ_Index
UNION ALL SELECT @4_0 AS [externalField], @4_1 AS [MyEntityId], @4_2 AS [CreatedDate], @4_3 AS [UpdateUser], @4_4 AS [UpdateDate], @4_5 AS [Id], @4_6 AS ZZZ_Index
UNION ALL SELECT @5_0 AS [externalField], @5_1 AS [MyEntityId], @5_2 AS [CreatedDate], @5_3 AS [UpdateUser], @5_4 AS [UpdateDate], @5_5 AS [Id], @5_6 AS ZZZ_Index) AS StagingTable ORDER BY ZZZ_Index
) AS StagingTable
ON 1 = 2
WHEN NOT MATCHED THEN
    INSERT ( [externalField], [MyEntityId], [CreatedDate], [UpdateUser], [UpdateDate] )
    VALUES ( [externalField], [MyEntityId], [CreatedDate], [UpdateUser], [UpdateDate] )
OUTPUT
    $action,
    StagingTable.ZZZ_Index,
    INSERTED.[Id]
INTO #ZZZProjects_26190111_a15e_47d7_b253_2cc24510b3f8z
;
SELECT   A.* ,B.[Id] AS [Id_zzzinserted] FROM #ZZZProjects_26190111_a15e_47d7_b253_2cc24510b3f8z AS A
INNER JOIN [dbo].[MyEntityContact] AS B  ON  A.[Id] = B.[Id]
;
DROP TABLE #ZZZProjects_26190111_a15e_47d7_b253_2cc24510b3f8z;',N'@0_0 int,@0_1 int,@0_2 smalldatetime,@0_3 nvarchar(50),@0_4 datetime,@0_5 int,@0_6 int,@1_0 int,@1_1 int,@1_2 smalldatetime,@1_3 nvarchar(50),@1_4 datetime,@1_5 int,@1_6 int,@2_0 int,@2_1 int,@2_2 smalldatetime,@2_3 nvarchar(50),@2_4 datetime,@2_5 int,@2_6 int,@3_0 int,@3_1 int,@3_2 smalldatetime,@3_3 nvarchar(50),@3_4 datetime,@3_5 int,@3_6 int,@4_0 int,@4_1 int,@4_2 smalldatetime,@4_3 nvarchar(50),@4_4 datetime,@4_5 int,@4_6 int,@5_0 int,@5_1 int,@5_2 smalldatetime,@5_3 nvarchar(50),@5_4 datetime,@5_5 int,@5_6 int',@0_0=34,@0_1=1297,@0_2='2014-09-16 17:05:00',@0_3=N'MyDomain\myUser',@0_4='2019-12-11 17:45:05.057',@0_5=NULL,@0_6=0,@1_0=35,@1_1=1297,@1_2='2014-09-16 17:33:00',@1_3=N'MyDomain\myUser',@1_4='2019-12-11 17:45:05.073',@1_5=NULL,@1_6=1,@2_0=37,@2_1=1297,@2_2='2014-09-17 16:27:00',@2_3=N'MyDomain\myUser',@2_4='2019-12-11 17:45:05.073',@2_5=NULL,@2_6=2,@3_0=47,@3_1=1297,@3_2='2014-09-19 11:55:00',@3_3=N'MyDomain\myUser',@3_4='2019-12-11 17:45:05.073',@3_5=NULL,@3_6=3,@4_0=54,@4_1=1297,@4_2='2014-09-22 10:49:00',@4_3=N'MyDomain\myUser',@4_4='2019-12-11 17:45:05.090',@4_5=NULL,@4_6=4,@5_0=66,@5_1=1297,@5_2='2014-09-29 13:59:00',@5_3=N'MyDomain\myUser',@5_4='2019-12-11 17:45:05.090',@5_5=NULL,@5_6=5

报告的错误是

SqlTypeException: SqlDateTime 溢出。 必须在 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。

在运行查询时,我一直在为 MyEntityId 使用不同的 id,并且它通过了。

调试器无法指出更多关于导致此失败的列的信息。

任何的想法?

我在 SaveChanges 方法(填充审计列)之前执行了一些操作。 通过在 BulkSaveChanges 之前执行相同的操作,一切顺利(而且速度更快!)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM