2015-09-28 144 views
0

我正在使用C#中的Entity Framework 6.1.3开发一个项目,我想设置一些二进制数据的最大限制。为什么DataAnnotation MaxLength(8192)不起作用?

[MaxLength(8192)]不起作用这是一个错误?似乎有一个上限。

[MaxLength(4096)]这个工作令人惊讶吗?

我是否正确使用DataAnnotations?

//[MaxLength(4096)] <-- this works 
[MaxLength(8192)] 
public Byte[] MediaData {get; set;} 

结果:

MediaData = c.Binary() 

预计:

MediaData = c.Binary(maxLength:) 

也试过。

[MaxLength(8192)] // this does not work either 
public string Text {get; set;} 

我可以手动修复它,但它让我很烦,DataAnnotations不能自动工作。 DataAnnotations有哪些经验/建议?

+4

在SQL Server中,'char','varchar','binary','varbinary'的最大长度是*** 8000 ***。所以也许这就是为什么它不起作用。你可以尝试一些较小的值。 – Hopeless

回答

2

从MSDN,看加粗部分:d

字符串部分:

nvarchar的[(N | MAX)] 可变长度Unicode字符串数据。 n定义了字符串的长度,可以是从1到4,000的数值。 max表示最大存储大小为2^31-1字节(2 GB)。存储大小(以字节为单位)是输入数据的实际长度+ 2个字节的两倍。 nvarchar的ISO同义词是国家字符变化和国家字符变化。

和二进制部分:

VARBINARY [(N | MAX)] 可变长度的二进制数据。 n可以是从1到8,000的值。 max表示最大存储大小为2^31-1字节。存储大小是输入数据的实际长度+ 2个字节。输入的数据可以是0字节。 varbinary的ANSI SQL同义词是二元变化的。

所以这里实际上有一个限制。

+2

OP不是在谈论** nvarchar ** - 他正在谈论**二进制数据**(例如SQL Server中的'varbinary',它有** 8000字节**的限制) –

+0

这到底是什么?为什么这些极限?你怎么适应图像和东西? – ColacX

+0

@ColacX看起来像你需要使用'image'类型(而不是'varbinary',我相信'byte []'默认映射到了'varbinary')。这意味着你需要明确地映射/指定列类型(到'image'而不是'varbinary')。 – Hopeless