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