2011-06-26 44 views
0

當我在實體框架中使用外鍵時,當我執行POST時外鍵對象爲空。我正在使用MVC3和EF 4.1。我有兩個表,產品和產品詳細信息。我在Razor視圖中使用HTML助手公開它們。 GET發生時,會顯示產品詳細信息。但是,當我做表單提交併發佈到服務器時,產品詳細信息集合爲空。我失去了所有的改變。在EF4.1 MVC3中更新外鍵表。對象在POST上爲空

任何想法我做錯了嗎?

感謝您的幫助!

代碼(i縮短它,因爲它是相當漫長的):

數據庫:

Table Product 
{ 
    int Id 
    varchar Name 
} 

Table ProductDetails 
{ 
    int id, 
    int ProductId, <- foreign key SQL 2008 to Product Table 
    varchar Details 
} 


View: 
@model WebSite.Models.Product 
@{ 
    ViewBag.Title = "MyLifeSaverStoreInfo"; 
} 

@Html.TextBoxFor(m => m.Product.Name) 
@Html.TextBoxFor(m => m.Product.ProductDetails.FirstOrDefault().Description) 

Controller: 
public ActionResult EditProduct(int productId) 
{ 
    var Product = _productRepository.GetProduct(productId); 
    return View(product); 
} 


[HttpPost] 
public ActionResult EditProduct(Product model) 
{ 
    string name = model.Name; <- this update comes through 
    string description = model.ProductDetails.FirstorDefault().Description; 
} 

感謝

+0

當你寫下這個問題時,你是否認爲重要的是發佈目前爲止的一些代碼?如果我問了一個問題,我肯定會提供我到目前爲止嘗試過的代碼。如果可以提供完整的場景(模型,控制器,視圖)以允許重現該問題,那將是最好的。 –

+0

我已更新該帖子。謝謝 –

回答

0

明白了!

除了在POST EditProduct方法上創建「產品」實體,我使用表單集合,然後根據該表單集合設置每個產品詳細信息,然後保存。我不明白爲什麼它不能以第一種方式工作。我手動更新外部參考。也許我錯過了什麼?

[HttpPost] 
public ActionResult EditProduct(int id, FormCollection formCollection) 
{ 
    var model = new MyLSstoreInfoViewModel{ 
            StoreCurrent = _profileRepository.GetProduct(Id) 
              }; 
    var productDetails = model.Product.ProductDetails.Where(p => p.productId == id).Single(); 


      productDetaisl.Details = formCollection["details"]; 
      if (TryUpdateModel(model.StoreCurrent)) 
      { 

       _profileRepository.Save(); 

      } 
} 
0

這是一個有點晚,但對於某人來說,今後可能有用:

如果您通過引用的孩子一樣在視圖中隱藏輸入的主鍵,它會正確解析子模型在行動中。