Image ObjectStateEntry GetModifiedProperties()错误地检测到字节[]属性的更改
实体框架是否错误地检测到对图像的更改 我有一个“个人”实体类,定义如下:Image ObjectStateEntry GetModifiedProperties()错误地检测到字节[]属性的更改,image,binding,bytearray,entity-framework-5,picturebox,Image,Binding,Bytearray,Entity Framework 5,Picturebox,实体框架是否错误地检测到对图像的更改 我有一个“个人”实体类,定义如下: public class Person { public int Id { get; set; } public byte[] Photo { get; set; } } 我已使用数据源将照片绑定到窗体上的PictureBox控件。 该表单还使用动态创建的bindingNavigator 我还编写了一个审计日志来填充捕获的更改 该过程调用ObjectContext DetectChanges(),然后 var ent
public class Person
{
public int Id { get; set; }
public byte[] Photo { get; set; }
}
我已使用数据源将照片绑定到窗体上的PictureBox控件。
该表单还使用动态创建的bindingNavigator
我还编写了一个审计日志来填充捕获的更改
该过程调用ObjectContext DetectChanges(),然后
var entries = ObjectContext.ObjectStateManager.GetObjectStateEntries()
其中包含显示照片已修改的条目。entry.OriginalValues[name]与entry.CurrentValues[name]匹配 该列在SQL Server中为varbinary(MAX),我加载的图片文件大小小于1Mb 如果我将所有列都设置为null,则不再发生错误 我用来获取文件的代码是
private void LoadPhotoButton_Click(object sender, EventArgs e)
{
using (var dlg = new OpenFileDialog())
{
dlg.Filter = "JPEG files |*.jpg";
if (dlg.ShowDialog() == DialogResult.OK)
{
PhotoPictureBox.Image = Image.FromFile(dlg.FileName);
}
}
}
我注意到,当这些字段涉及字符串转换时,十六进制零可以作为填充字符插入。。。。装订厂会不会这样做
如果我从表单中删除picturebox,或者甚至将控件绑定为文本框而不是picturebox,那么行为是正确的(绑定到文本框的图片没有任何用处)
我可以通过不直接绑定到图片框来解决这个问题。
相反,我只是使用
private void BindingSource_CurrentChanged(object sender, EventArgs e)
{
var obj = (Person) BindingSource.Current;
this.PictureBox.Image = byteArrayToImage( obj.Photo);
}
public Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
我正在使用我的变通方法——记录在问题的末尾,作为一个现成的答案