我在我的学生模型中声明为:
[Column(TypeName = "image")] public byte[] Photo { get; set; }
数据库创建的照片列的图像数据类型可以在这里看到:
问题是:
当我运行应用程序,并尝试保存一张3 MB照片的学生(例如),我得到一个例外:
validationError.ErrorMessage = "The field Photo must be a string or array type with a maximum length of '4000'."
sql Server CE支持这些@L_403_0@.在sql Express和sql Compact Edition(CE)之间的这个comparison中,我们通过使用图像数据类型支持sql CE支持二进制(BLOB)存储。
Image = Variable-length binary data
with a maximum length of 2^30–1
(1,073,741,823) bytes. Storage is the
length of the value in bytes.
形象应该做我想的工作。
我在这里做错了什么?这是一个bug吗?
注意:
我也尝试过MaxLength数据注释:
[Column(TypeName = "image")] [MaxLength(int.MaxValue)] public byte[] Photo { get; set; }
但我得到这个例外:
Binary column with MaxLength greater than 8000 is not supported.
编辑:
我发现post发布了EF 4.1。它有以下:
Change of default length for non-key
string and binary columns from ‘128’
to ‘Max’. sql Compact does not support
‘Max’ columns,when running against
sql Compact an additional Code First
convention will set a default length
of 4000. There are more details about
the change included in a recent blog
post (link below).
好吧,我唯一可以让它工作的方式是做所描述的here,也就是设置DbContext.Configuration.ValidateOnSaveEnabled = false。这是一个解决方法,因为帖子建议。
解决方法
public StudentContext() { // required to prevent bug - http://stackoverflow.com/questions/5737733 this.Configuration.ValidateOnSaveEnabled = false; }
已经找到了更好的解决方案。不要禁用验证。
[博客文章更新]
更新:LINQ to sql和EF Code First fame的@DamienGuard指出,一个更好和更多的提供商不可知的解决方案是使用MaxLength而不是TypeName =“ntext”。
更新2:使用[MaxLength]可防止任何验证错误,并且不需要禁用验证。