使用ASP.NET MVC 3和实体框架4.1代码首先在SQL CE 4.0中存储图像时出错

前端之家收集整理的这篇文章主要介绍了使用ASP.NET MVC 3和实体框架4.1代码首先在SQL CE 4.0中存储图像时出错前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在sql Compact Edition(CE)数据库中存储/保存图像。

我在我的学生模型中声明为:

[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支持这些Data Types.在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。这是一个解决方法,因为帖子建议。

解决方法

对于那些遇到这个问题的人来说,Erik Ejlskov Jensen发布了 a working console application,这显示了这个bug的解决方法。正如OP所说,答案的关键部分是:
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]可防止任何验证错误,并且不需要禁用验证。

原文链接:https://www.f2er.com/aspnet/252892.html

猜你在找的asp.Net相关文章