我对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();
}
我检查了项目的数据长度,没有发现任何问题。
有人有想法吗?
谢谢。
答案 0 :(得分:1)
SaveChanges
使用SqlCommand。如果名称长于数据库限制,它将被无提示地截断,因此不会引发任何错误。
BulkInsert
使用SqlBulkCopy
,如果名称长于数据库限制,则将引发错误。
这说明了为什么在一种情况下出现错误而在另一种情况下没有错误。
SqlBulkCopy不会出于娱乐目的而引发此错误,因此我将再次检查您的长度与列大小。
char(xyz)
并且结尾处有空格? .NET Fiddle支持Entity Framework
和NuGet
软件包。因此,如果您可以在线复制它,则可以确切地说出发生这种情况的原因。