0

Entity Framework 是否错误地检测到图像的更改?

我有一个“人”实体类定义如下;

public class Person
{
 public int Id { get; set; }
 public byte[] Photo { get; set; }
}

我已使用数据源将 Photo 绑定到表单上的 PictureBox 控件。那里的表单还使用了一个动态创建的 bindingNavigator。

我还编写了一个审核日志来填充捕获的更改该过程调用 ObjectContext DetectChanges() 然后

var entries = ObjectContext.ObjectStateManager.GetObjectStateEntries()    

其中包含显示照片已被修改的条目。
entry.OriginalValues[name] 匹配 entry.CurrentValues[name]

SQL Server中的Column是varbinary(MAX),我加载的图片文件大小在1Mb以下

如果我将所有列设置为空,则不再发生错误

我用来获取文件的代码是

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

在这里注意到,当这些字段涉及字符串转换时,可以将十六进制零作为填充字符插入......绑定可以以某种方式做到这一点吗?

如果我从表单中删除图片框,甚至将控件绑定为文本框而不是图片框,那么行为是正确的(不是绑定到文本框的图片有任何用处)

我可以通过不直接绑定到图片框来解决这个问题。相反,我只是将它加载到 BindingSource_CurrentChanged 事件中使用

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

1 回答 1

0

我正在使用我的工作 - 在问题的末尾记录为一个可行的答案。

于 2013-01-18T04:02:34.157 回答