我想将一张图片保存到SQL Compact Edition (CE) 数据库中。
在我的学生模型中,我声明了该字段为:
[Column(TypeName = "image")]
public byte[] Photo { get; set; }
数据库中创建了一个包含图像数据类型的"Photo"列,如下图所示:
问题是:
当我运行应用程序并尝试保存一个大小为3 MB的学生照片时,会出现异常:
validationError.ErrorMessage = "The field Photo must be a string or array type
with a maximum length of '4000'."
SQL Server CE支持这些数据类型。在这篇SQL Express和SQL Compact Edition(CE)的比较中,我们得知SQL CE通过使用image数据类型支持二进制(BLOB)存储。
Image = 变长二进制数据,最大长度为2^30-1(1,073,741,823)字节。存储是值的字节长度。
我认为Image可以胜任这个任务。
我做错了什么?这是一个bug吗?
注意:
我还尝试了MaxLength数据注释:
[Column(TypeName = "image")]
[MaxLength(int.MaxValue)]
public byte[] Photo { get; set; }
但我遇到了这个异常:
Binary column with MaxLength greater than 8000 is not supported.
编辑:
我找到了关于EF 4.1发布的文章,其中提到:
更改非主键字符串和二进制列的默认长度从“128”到“Max”。当使用SQL Compact时,不支持“Max”列。在针对SQL Compact运行时,另一个Code First约定将设置默认长度为4000。有关此更改的更多详细信息包含在最近的博客文章中(链接如下)。
好吧好吧......我能让它正常工作的唯一方法是按照这里所述的做法设置DbContext.Configuration.ValidateOnSaveEnabled = false
。这是一个解决方法,正如文章所建议的那样。
ValidateOnSaveEnabled = false
。 - Leniel MaccaferrimodelBuilder.ComplexType().Property(data => data.Content).HasColumnType("image");
我在Visual Studio的服务器资源管理器中进行了检查,并且在数据库中生成的列具有DataType=Image和Length=1073741823,但保存失败并出现与问题相同的错误。添加Configuration.ValidateOnSaveEnabled = false;
也没有帮助。你还有什么提示吗? - Paul