2013-11-01 65 views
0

作爲問題意味着我想要將圖像存儲到文件系統並在數據庫中保存鏈接。 但NHibernate不保存數據庫中的文件路徑。這裏是代碼:在nhibernate文件系統中存儲圖像

[HttpPost] 
    public ActionResult Edit(Item item, HttpPostedFileBase image) 
    { 
     if (ModelState.IsValid) 
     { 
      if (image != null) 
      { 
       string imageName = image.FileName; 
       string location = Path.Combine(Server.MapPath("~/Content/Images/ItemImages/") , imageName); 
       image.SaveAs(location); 
       item.Image= imageName; 
      } 

      menuItemRepository.SaveOrUpdate(item); 
// here the debug show the image path has correctly assigned to the image property 
       Debug.WriteLine(item.Image); 
       TempData["message"] = string.Format("{0} has been saved", item.Name); 
       return RedirectToAction("Index", item.Parent); 
      } 
      else 
      { 
       // there is something wrong with the data values 
       return View(Item); 
      } 
     } 

但復位器後保存或更新的項目,當我看着數據庫,圖像爲空。我試圖指定像圖像名稱ele,它確實工作,但圖像路徑不工作!我很困惑爲什麼會發生這種情況。有人有什麼主意嗎?

public class Item 
{ 
    public virtual string Image { get; set; } 
} 

public calss ItemMap : ClassMap<Item> 
{ 
    public ItemMap() 
{ 
Map(x => x.Image).Length(100); 
} 
} 

//////////庫

public T SaveOrUpdate(T entity) 
    { 
     session.SaveOrUpdate(entity); 
     return entity; 
    } 
+0

menuItemRepository.SaveOrUpdate的代碼是什麼? – MichaC

+0

@MichaC code added。該存儲庫可以保存或更新我的所有實體。我也可以將圖像保存爲二進制文件到數據庫,但我認爲將其保存到應用程序目錄很適合這種情況。 –

回答

0

我爲我的MVC應用程序實現了一個sessionPreRequest模塊。所以我在那裏做了commit()操作。 我查看了一下,看到我的交易沒有提交併且正在回滾。並檢查錯誤,數據庫中的圖像列爲nvarchar(50),但是具有圖像路徑的字符串大於50個字符。所以我改爲nvarchar(200),現在一切正常。

0

我最好的猜測 - 保存不被刷新到數據庫。見documentation

不時的ISession將執行到ADO.NET連接的狀態與內存中的對象的狀態同步所需的SQL語句。這個過程,沖洗,默認會在以下幾點

    Find()Enumerable()
  • 一些調用
  • NHibernate.ITransaction.Commit()
  • ISession.Flush()

我什麼也看不到你的會觸發刷新的代碼。包裝你SaveOrUpdate在交易:

using (var trx = menuItemRepository.BeginTransaction()) 
{ 
    menuItemRepository.SaveOrUpdate(item); 
    trx.Commit(); 
} 

trx.Commit()將刷新該未決update查詢數據庫。

相關問題