C# Entity Framework 6 BulkInsert从客户端SQL SERVER 2012 Express接收到无效的列长度

C# Entity Framework 6 BulkInsert从客户端SQL SERVER 2012 Express接收到无效的列长度,c#,entity-framework-6,sql-server-2012-express,C#,Entity Framework 6,Sql Server 2012 Express,我对EntityFramework6有点问题 我的应用程序是WPF C#应用程序,我使用SQL SERVER 2012 Express 我尝试将数据插入Person表 它工作了很长时间。今天我遇到了一个错误:从客户机46接收到一个无效的列长度 我搜索并找到了一些文章,他们谈论的是列大小等,但在我的情况下,这不是问题所在 这段代码正在工作:dc.BulkInsert(listToInsert,options) **使用EntityFramework.BulkInsert.Extensions**

我对EntityFramework6有点问题

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

我尝试将数据插入Person表

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

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

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

**使用EntityFramework.BulkInsert.Extensions**
//我有一个要插入的person对象列表。
var listToInsert=PersonList.Where(ro=>!ExistingPerson.Contains(ro.Pers_Code.ToLower()).ToList();
使用(MyEntities dc=new MyEntities())
{
*//如果我一个接一个地添加项目,它会起作用*
foreach(listToInsert中的变量项)
{
dc.人员.添加(项目);
}
dc.SaveChanges();//成功。
//但是如果我使用Bulkinsert,我会收到一条错误消息
BulkInsertOptions=新的BulkInsertOptions();
options.BatchSize=1000;
dc.BulkInsert(listToInsert,options);//此时我收到一条错误消息:从客户端接收到一个无效的列长度。
dc.SaveChanges();
}
我检查了项目的数据长度,没有发现任何问题

有人有主意吗


谢谢。

保存更改使用SqlCommand。如果名称超过数据库限制,它将被自动截断,因此不会抛出错误

BulkInsert
使用
SqlBulkCopy
,如果名称长度超过数据库限制,将抛出错误

这就解释了为什么在一种情况下会出现错误,而在另一种情况下不会出现错误

SqlBulkCopy并不是为了好玩而提出这个错误,所以我会用列大小仔细检查您的长度

  • 可能类型是
    char(xyz)
    并且末尾有空格
  • 也许一开始就有一些空间
  • 等等
.NET Fiddle支持
实体框架
NuGet
包。所以,如果你能在网上复制它,就有可能准确地说出为什么会发生这种情况


示例:

您确定数据库和类之间没有不匹配吗?您能添加实体类+创建Sql表语句吗?这段代码运行了很长时间。今天只有新的数据。我没有考虑不匹配的问题,因为使用实体框架并逐个添加是可行的。但正如@jonathan所提到的,它很可能是某个字符串,它现在比数据库预期的要长,而对于SQL语句,它很可能被截断。
  **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();
 }