2013-02-12 122 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

订购后代编号搜索,然后使用第一个属性的回答