Asp.net mvc 通过实体框架获取表的最新记录

Asp.net mvc 通过实体框架获取表的最新记录,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我使用的是EntityFramework的代码优先功能,我用这个字段创建了一个模型类,它有自己的属性(这里我不提它们!): 对于这个类的每个部分,我都有单独的视图模型,例如,我有AboutViewModel来更新管理部分中的About,并在网站中的About页面中导航: public class AboutViewModel { public Guid Id { get; set; } public string AboutText { get; set; }

我使用的是EntityFramework的代码优先功能,我用这个字段创建了一个模型类,它有自己的属性(这里我不提它们!):

对于这个类的每个部分,我都有单独的视图模型,例如,我有
AboutViewModel
来更新管理部分中的
About
,并在网站中的About页面中导航:

public class AboutViewModel
{
        public Guid Id { get; set; }
        public string AboutText { get; set; }
        public string Image { get; set; }
}
现在,当我更新
AboutViewModel
时,数据库中的
纵向
表将创建一个包含about文本的记录(其他字段将为空)

对于此表的其他部分(如
Resume
或其他部分)的更新,它将生成另一个带有更新和插入字段的记录(现在此记录中关于文本的内容将为空!)

既然我有好几条记录,我怎么才能让about字段在UI中显示呢!?我不想也不能通过ID获取这些字段,因为我总是想在网站上显示它们的最新更新,我写的是这样的,我获取关于文本的关于操作是这样的:

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

            return View(about);
}
public Portrait GetContent()
{
            return _siteContext.Portraits.Find();
}
GetContent()
是这样的:

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

            return View(about);
}
public Portrait GetContent()
{
            return _siteContext.Portraits.Find();
}
但不起作用,我犯了一个错误:

传递的主键值数量必须与实体上定义的主键值数量匹配。参数名称:keyValues


我走错方向了吗?请告诉我如何解决此问题?

您应该在执行插入时检索ID。然后将该值保存到会话或其他内容中,以供以后在关于操作中使用

调用存储库对插入进行个性化处理,如下所示

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 ActionResult About()
{
    var about= _portraitRepository.GetLatest();
}
public Portrait GetLatest()
{
    var latestId = _siteContext.Portraits.Max(p => p.Id);
    return _siteContext.Portraits.Find(latestId);
}
肖像库中用于插入新肖像的方法如下所示

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 ActionResult About()
{
    var about= _portraitRepository.GetLatest();
}
public Portrait GetLatest()
{
    var latestId = _siteContext.Portraits.Max(p => p.Id);
    return _siteContext.Portraits.Find(latestId);
}
“关于”操作将如下所示

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 ActionResult About()
{
    var about= _portraitRepository.GetLatest();
}
public Portrait GetLatest()
{
    var latestId = _siteContext.Portraits.Max(p => p.Id);
    return _siteContext.Portraits.Find(latestId);
}
在存储库中,它应该如下所示

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

您应该在执行插入时检索ID。然后将该值保存到会话或其他内容中,以供以后在关于操作中使用

调用存储库对插入进行个性化处理,如下所示

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 ActionResult About()
{
    var about= _portraitRepository.GetLatest();
}
public Portrait GetLatest()
{
    var latestId = _siteContext.Portraits.Max(p => p.Id);
    return _siteContext.Portraits.Find(latestId);
}
肖像库中用于插入新肖像的方法如下所示

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 ActionResult About()
{
    var about= _portraitRepository.GetLatest();
}
public Portrait GetLatest()
{
    var latestId = _siteContext.Portraits.Max(p => p.Id);
    return _siteContext.Portraits.Find(latestId);
}
“关于”操作将如下所示

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 ActionResult About()
{
    var about= _portraitRepository.GetLatest();
}
public Portrait GetLatest()
{
    var latestId = _siteContext.Portraits.Max(p => p.Id);
    return _siteContext.Portraits.Find(latestId);
}
在存储库中,它应该如下所示

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

另一个选项是获取纵向表Id的最大值(如果它是标识列)

操作如下所示

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 ActionResult About()
{
    var about= _portraitRepository.GetLatest();
}
public Portrait GetLatest()
{
    var latestId = _siteContext.Portraits.Max(p => p.Id);
    return _siteContext.Portraits.Find(latestId);
}
存储库如下所示

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 ActionResult About()
{
    var about= _portraitRepository.GetLatest();
}
public Portrait GetLatest()
{
    var latestId = _siteContext.Portraits.Max(p => p.Id);
    return _siteContext.Portraits.Find(latestId);
}

另一个选项是获取纵向表Id的最大值(如果它是标识列)

操作如下所示

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 ActionResult About()
{
    var about= _portraitRepository.GetLatest();
}
public Portrait GetLatest()
{
    var latestId = _siteContext.Portraits.Max(p => p.Id);
    return _siteContext.Portraits.Find(latestId);
}
存储库如下所示

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 ActionResult About()
{
    var about= _portraitRepository.GetLatest();
}
public Portrait GetLatest()
{
    var latestId = _siteContext.Portraits.Max(p => p.Id);
    return _siteContext.Portraits.Find(latestId);
}

按子代Id排序搜索,然后使用第一个属性

按子代Id排序搜索,然后使用第一个属性

谢谢您的回答,我在保存Id时没有任何问题,但在关于操作(public ViewResult about())中,我无法使用Id,我可以吗?编辑了上面问题的答案,并对其进行了澄清。但在这种情况下,它不会返回任何结果!调试应用程序并检查传递到Find(Id)方法的Id值,并检查数据库以查看它是否存在于纵向表中。对象引用未设置为对象的实例。当我呼吁有关行动!它没有得到任何答案谢谢你的回答,我在保存Id时没有任何问题,但是在关于操作(public ViewResult about())中,我无法使用Id进行操作,可以吗?我编辑了答案,并对上面的问题进行了澄清。但在这种情况下,它不会返回任何结果!调试应用程序并检查传递到Find(Id)方法的Id值,并检查数据库以查看它是否存在于纵向表中。对象引用未设置为对象的实例。当我呼吁有关行动!它没有得到任何好处