Entity Framework - размер строки превышает допустимый максимальный размер строки 8060

У меня есть объект с двоичным типом данных и соответствующим 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 
Другие вопросы по тегам