2013-01-17 41 views
0

實體框架是否錯誤地檢測到對圖像的更改?ObjectStateEntry GetModifiedProperties()錯誤地檢測到對byte []屬性的更改

我有一個「Person」實體類定義如下;

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

我已經使用數據源將照片綁定到我的窗體上的PictureBox控件。 表單還使用動態創建的bindingNavigator。

我也寫了一個審計日誌來填充捕捉的改變 程序調用ObjectContext的DetectChanges(),然後

var entries = ObjectContext.ObjectStateManager.GetObjectStateEntries()  

其中包含顯示該照片已被修改的條目。
entry.OriginalValues [名]匹配entry.CurrentValues [名]

列是VARBINARY(MAX),在SQL Server中,我已經加載了圖片文件的大小是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); 
     } 
    } 
} 

的代碼我注意到here是十六進制零可插入作爲填充字符時這些字段涉及到字符串轉換....綁定可以做到這一點嗎?

如果我從表單中刪除圖片框,甚至將控件綁定爲一個文本框,而不是一個圖片,則行爲是正確的(不是綁定到一個文本框的照片是任何使用)

我我可以通過不直接綁定到圖片框來解決問題。 相反,我只是加載它使用

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

回答

0

我用我的工作圍繞BindingSource_CurrentChanged事件 - 在這個問題作爲一個湊合的回答最後記錄。