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;
    }

我正在使用我的变通方法——记录在问题的末尾,作为一个现成的答案