实体框架6 BulkInsert从客户端SQL SERVER 2012 Express接收无效的列长度

问题描述 投票:0回答:1

我对Entity Framework 6有一点问题。

我的应用程序是WPF C#应用程序,我使用的是SQL SERVER 2012 Express。

我尝试将数据插入到Person表中。

它工作了很长时间。今天我遇到了一个错误:从客户端46收到无效的列长度。

我搜索并发现了一些文章,他们正在谈论列大小等,但在我的情况下,这不是问题。

这段代码正常工作:dc.BulkInsert(listToInsert,options);

  **using EntityFramework.BulkInsert.Extensions;**


     //I have a list of person object to insert.
     var listToInsert = PersonList.Where(ro => !ExistingPerson.Contains(ro.Pers_Code.ToLower())).ToList();


 using(MyEntities dc = new MyEntities())
 {
   *//If I add items one by one, it works*
   foreach (var item in listToInsert)
   {
     dc.Person.Add(item);
   }
   dc.SaveChanges(); //Success.


    //But If I use Bulkinsert, I have an error message 

   BulkInsertOptions options = new BulkInsertOptions();
   options.BatchSize = 1000;
   dc.BulkInsert<Person>(listToInsert, options); // at this moment I have this error message : receiving an invalid column length from the client 46.


    dc.SaveChanges();
 }

我检查了项目的数据长度,我没有看到任何问题。

有没有人有想法?

谢谢。

c# entity-framework-6 sql-server-2012-express
1个回答
1
投票

SaveChanges使用SqlCommand。如果名称长于数据库限制,它将被静默截断,因此不会抛出任何错误。

BulkInsert使用SqlBulkCopy,如果名称长于数据库限制,则会抛出错误。

这解释了为什么你在一个案例中得到错误而在另一个案例中没有错误。

SqlBulkCopy不会因为有趣而引发此错误,因此我会仔细检查您的列长度。

  • 也许类型是char(xyz),最后还有空间?
  • 也许一开始有一些空间?
  • 等等

.NET Fiddle支持Entity FrameworkNuGet包。因此,如果您可以在线重现它,就可以准确地说出为什么会发生这种情况。

示例:https://dotnetfiddle.net/35mQ0W

© www.soinside.com 2019 - 2024. All rights reserved.