Entity Framework 6 BulkInsert получает неверную длину столбца от клиента SQL SERVER 2012 Express - PullRequest
0 голосов
/ 22 февраля 2019

У меня небольшая проблема с 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();
 }

Я проверил длину данных элементов, я не увидел никаких проблем.

У кого-нибудь есть идея?

Спасибо.

1 Ответ

0 голосов
/ 22 февраля 2019

SaveChanges использует SqlCommand.Если имя длиннее, чем предел базы данных, оно будет молча усечено, поэтому не будет выдано никакой ошибки.

В BulkInsert используется SqlBulkCopy, если имя длиннее, чем предел базы данных,будет выдана ошибка.

Это объясняет, почему вы получаете ошибку в одном случае, а в другом - ни одной.

SqlBulkCopy не вызывает эту ошибку для развлечения, поэтому я бы дважды проверил вашудлина с размером вашего столбца.

  • Возможно, типом является char(xyz) и в конце есть пробел?
  • Возможно, в начале есть пробел?
  • и т. д.

. NET Fiddle поддерживает пакеты Entity Framework и NuGet.Так что, если бы вы могли воспроизвести это онлайн, можно было бы точно сказать, почему это происходит.

Пример: https://dotnetfiddle.net/35mQ0W

...