Eri*_*sen 1 asp.net-mvc entity-framework
我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
对于这个类的每个部分,我都有单独的ViewModel,例如我必须在admin部分AboutViewModel更新About并在网站的about page中导航:
public class AboutViewModel
{
public Guid Id { get; set; }
public string AboutText { get; set; }
public string Image { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在当我更新时AboutViewModel,Portrait数据库中的表将创建一个关于文本的记录(其他字段将为null)
并且为了更新此表的其他部分Resume或其他部分,它将生成另一个带有更新和插入字段的记录(现在在此记录中有关文本将为null!)
现在我怎么能得到about字段在UI中显示它,因为我有几个记录!我不想也不能通过ID获取这些字段,因为我总是希望将最新的更新显示在网站上,我写的是这样的,我关于获取about文本的动作是这样的:
public ViewResult About()
{
var about= _portraitRepository.GetContent();
return View(about);
}
Run Code Online (Sandbox Code Playgroud)
这GetContent()是这样的:
public Portrait GetContent()
{
return _siteContext.Portraits.Find();
}
Run Code Online (Sandbox Code Playgroud)
但是没有用,我收到了这个错误:
传递的主键值的数量必须与实体上定义的主键值的数量相匹配.参数名称:keyValues
我的方向错了吗?我该如何解决这个问题?
另一个选项是获取Portrait表的Id的Max值(如果它是标识列).
该动作如下所示.
public ActionResult About()
{
var about= _portraitRepository.GetLatest();
}
Run Code Online (Sandbox Code Playgroud)
存储库将如下所示.
public Portrait GetLatest()
{
var latestId = _siteContext.Portraits.Max(p => p.Id);
return _siteContext.Portraits.Find(latestId);
}
Run Code Online (Sandbox Code Playgroud)