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)

Что Дает

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

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

ALTER TABLE [dbo].[Attachments] REBUILD