データベースに保存された画像が同じであることを比較して、I/O を節約する最良の方法は何ですか。
シナリオ:
Entity Framework を使用して MVC3 で ASP.NET アプリケーションを作成しています。UserProfile コントローラのEditアクション メソッドがあります。ここで、メソッドに投稿した画像が異なることを確認したいと思います。異なる場合は、 ObjectContext を呼び出します。同じ画像の場合はSaveChanges() 、次に進みます。
これが私のコードの縮小版です:
[HttpPost, ActionName("Edit")]
public ActionResult Edit(UserProfile userprofile, HttpPostedFileBase imageLoad2)
{
Medium profileImage = new Medium();
if (ModelState.IsValid)
{
try
{
if (imageLoad2 != null)
{
if ((db.Media.Count(i => i.Unique_Key == userprofile.Unique_Key)) > 0)
{
profileImage = db.Media.SingleOrDefault(i => i.Unique_Key == userprofile.Unique_Key);
profileImage.Amend_Date = DateTime.Now;
profileImage.Source = Images.ImageToBinary(imageLoad2.InputStream);
profileImage.File_Size = imageLoad2.ContentLength;
profileImage.File_Name = imageLoad2.FileName;
profileImage.Content_Type = imageLoad2.ContentType;
profileImage.Height = Images.FromStreamHeight(imageLoad2.InputStream);
profileImage.Width = Images.FromStreamWidth(imageLoad2.InputStream);
db.ObjectStateManager.ChangeObjectState(profileImage, EntityState.Modified);
db.SaveChanges();
}
}
}
}
そのため、イメージを varbinary(max) として SQL Server Express DB に保存します。これは、エンティティでバイト配列として参照されます。
ポストからバイト配列をループし、それを ObjectContext に引き戻されたバイト配列と比較するだけの場合ですか?