我正在使用EF 6.1.3。使用代码首先将实体中的byte[]
属性设置为max。 8000字节。任何使其更大的尝试,即MAX,都会失败。
HasMaxLength(null)
(是的,参数是int?)仍将其设置为8000,HasMaxLength(int.MaxValue)
或任何其他大于8000的值使EF抛出System.Data.Entity.Core.MetadataException
:
指定的架构无效。错误:(0,0):错误0026:MaxLength ' 2147483647'无效。长度必须介于' 1'和' 8000'对于 ' VARBINARY'类型。
SQL server 13.0.2151(mssqllocaldb)允许varbinary(max):
这个限制对我来说似乎太严重了。试图找出它被强加的原因并没有给出一个很好的理由。所以,我的问题是
如何在EF代码中首先将byte []映射到varbinary(max)?
PS:该属性也是必需的',但我不确定是否可以将可选属性设置为varbinary(MAX)。无论如何,我没有测试过这个案例,因为它对我没有多大意义。
答案 0 :(得分:2)
好吧,我找到了解决方法。指定HasColumnType("image")
可以解决问题,但我仍然认为EF也必须允许指定varbinary(max)
。
此外,并非所有二进制文件都是图像。 ;)
仍然有一部分问题没有答案,所以我会这样说:
为什么无法首先在EF代码中将byte []属性映射到varbinary(max)?
欢迎任何评论(或当然的答案)。提前谢谢。
编辑(根据Gert的评论):离开没有任何规格的属性会使EF生成varbinary(max)
。出乎意料的简单!
答案 1 :(得分:1)
尽管有多篇文章指出解决方案是添加以下属性
[Column(TypeName =“ image”)]
byte []照片{get;组; }
我找到了正确的方法,而是添加了此属性
[MaxLength]
公共字节[]照片{get;组; }
使用Column(TypeName)建议,我最终将在SQLCE中遇到以下错误:
“照片”字段必须是字符串或数组类型,最大长度为“ 4000”
答案 2 :(得分:0)
在要更新数据库之前,请先查看使用