Entity Framework — размер строки больше допустимого максимального размера строки 8060

#sql-server #sql-server-2008 #entity-framework

#sql-server #sql-server-2008 #entity-framework

Вопрос:

У меня есть объект с двоичным типом данных и соответствующим varbinary(max) столбцом в SQL Server. EF создает это:

 CREATE TABLE [dbo].[Attachments] 
(
    [Id] INT IDENTITY(1,1) NOT NULL,
    [FileName] NVARCHAR(255) NOT NULL,
    [Attachment] VARBINARY(MAX) NOT NULL
);
  

Когда я пытаюсь вызвать .SaveChanges() Entity Framework, я получаю сообщение об ошибке:

Не удается создать строку размером 8061, размер которой превышает допустимый максимальный размер строки 8060

Я понимаю ошибку, в Google ее много, но я не понимаю, почему я ее получаю. Разве это не должно управляться Entity Framework / SQL Server?

Ричард

Ответ №1:

Единственный способ, которым я могу видеть, что вы получаете эту ошибку с этим определением таблицы, — это если у вас ранее был большой столбец фиксированной ширины, который с тех пор был удален.

 CREATE TABLE [dbo].[Attachments] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [FileName] nvarchar(255) NOT NULL,
    [Attachment] varbinary(max) NOT NULL,
    Filler char(8000),
    Filler2 char(49)
);

ALTER TABLE  [dbo].[Attachments] DROP COLUMN Filler,Filler2

INSERT INTO [dbo].[Attachments]
([FileName],[Attachment])
VALUES
('Foo',0x010203)
  

Что дает

Сообщение 511, уровень 16, состояние 1, строка 12 Не может создать строку размером 8075, которая превышает допустимый максимальный размер строки 8060.

Если это так, попробуйте перестроить таблицу

 ALTER TABLE [dbo].[Attachments] REBUILD 
  

Комментарии:

1. Действительно молодец, этот человек 🙂 У меня была похожая мысль, но мои поиски в Google привели меня к попытке DBCC CLEANTABLE. Ваше предложение было правильным. Большое спасибо!

2. Фактически, рекомендуется перестраивать таблицу после изменения структуры. Это значительно повышает производительность!

3. мартин, я столкнулся с той же проблемой, к сожалению, в настоящее время мы используем sql 2005, есть ли способ перестроить таблицу, не удаляя ее содержимое?

4. @user изменяет таблицу… перестроение не существует в 2005 году?

5. к сожалению, его не существует.