2013-02-12 121 views
1

我使用的EntityFramework的代碼第一特徵的,我已經創造了這個領域有自己的屬性模型類(我不一一列舉!):獲取表中的最新記錄

public class Portrait 
{ 
     private Guid _id; 
     private string _aboutimage; 
     private string _aboutMe; 
     private string _mainMenu; 
     private string _headerImage; 
     private string _resume; 
     private string _showpiece; 
     private string _siteMenu; 
     private string _adminMenu; 
} 

,併爲該類我有獨立的視圖模型的各個部分,比如我有AboutViewModel更新管理部分About和有關頁面在網站導航中:

public class AboutViewModel 
{ 
     public Guid Id { get; set; } 
     public string AboutText { get; set; } 
     public string Image { get; set; } 
} 

現在,當我更新AboutViewModelPortrait數據庫中的表將創建一個關於文本的記錄(其他字段將爲空)

並且爲了更新此表的其他部分(如Resume或其他),它將生成另一個帶更新和插入字段的記錄(現在在此記錄有關文本將是空的!)

現在,我怎麼得到約字段,以顯示它的UI,因爲我有幾個記錄!?我不想,也不能由ID獲取這些字段,因爲我總是希望有他們最新的更新網站顯示,我已經寫了是這樣的,我對動作來獲得關於文字是這樣的:

public ViewResult About() 
{ 
      var about= _portraitRepository.GetContent(); 

      return View(about); 
} 

GetContent()是這樣的:

public Portrait GetContent() 
{ 
      return _siteContext.Portraits.Find(); 
} 

但不到風度的工作,我得到這個錯誤:

The number of primary key values passed must match number of primary key values defined on the entity. Parameter name: keyValues

我是在一個錯誤的方向?我該如何解決這個問題?

回答

1

當您執行插入你應該獲取ID。然後

調用保存價值的會話或東西以備後用在你的關於行動的存儲庫persom插入看起來像下面。

Session["LatestPortraitId"] = _portraitRepository.AddPortrait(); 

用於插入新肖像的縱向存儲庫中的方法應如下所示。

public int AddPortrait(portrait) 
{ 
    _siteContext.AddObject(portrait); 
    _siteContext.SaveChanges(); 
    return portrait.Id; 
} 

「關於」操作如下所示。

public ActionResult About() 
{ 
    var latestPortraitId = Int.Parse(Session["LatestPortraitId"]); 
    var about= _portraitRepository.GetContent(latestPortraitId); 
} 

在存儲庫中,它應該如下所示。

public Portrait GetContent(int id) 
{ 
    return _siteContext.Portraits.Find(id); 
} 
+0

感謝,我沒有與保存ID的任何問題,但在有關行動(公共的ViewResult關於()),我可以我不知道Id,可以嗎? – 2013-02-12 13:27:27

+0

編輯答案,並澄清上述問題。 – 2013-02-12 13:59:13

+0

但它在這種情況下不會返回任何結果! – 2013-02-12 14:43:48

6

另一種選擇是讓畫像表標識的最大價值,如果它是標識列

動作看起來像下面。

public ActionResult About() 
{ 
    var about= _portraitRepository.GetLatest(); 
} 

存儲庫如下所示。

public Portrait GetLatest() 
{ 
    var latestId = _siteContext.Portraits.Max(p => p.Id); 
    return _siteContext.Portraits.Find(latestId); 
} 
0

訂購後代編號搜索,然後使用第一個屬性的回答