sql-server - Entity Framework - 行大小大于允许的最大行大小 8060

标签 sql-server sql-server-2008 entity-framework

我在 SQL Server 中有一个具有二进制数据类型的实体和相应的 varbinary(max) 列。 EF 创建了这个:

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

当我尝试从 Entity Framework 调用 .SaveChanges() 时,出现错误:

Cannot create a row of size 8061 which is greater than the allowable maximum row size of 8060

我理解这个错误,Google 上有很多这样的错误,但我不明白为什么会出现这个错误。这不应该由 Entity Framework /SQL Server 管理吗?

理查德

最佳答案

我可以看到您在该表定义中遇到此错误的唯一方法是,如果您之前有一个较大的固定宽度列,但后来已被删除。

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, Level 16, State 1, Line 12 Cannot create a row of size 8075 which is greater than the allowable maximum row size of 8060.

如果是这种情况,请尝试重建表

ALTER TABLE [dbo].[Attachments] REBUILD 

关于sql-server - Entity Framework - 行大小大于允许的最大行大小 8060,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7631546/

相关文章:

c# - 如何不在插入中使用 SCOPE_IDENTITY()

entity-framework - 在 Database-First 工作流上禁用默认构造函数

c# - Linq 方法有问题

sql-server - SQL Server 2008 中的 XML 数据类型 - 查找以 "name"开头的所有属性的值

sql - 更改 SQL 中表的架构名称

sql-server-2008 - 完全禁用对 SQL Server 的远程访问

sql-server - 如何从 SQL Server 中选择 y 行之后的数据顶部 x 数据

SQL Server 在子字符串中使用条件

sql-server - SQL Server Varchar(max) 和占用的空间

c# - dbcontext 和 objectcontext 中的 NULL 处理