将选择列表中的两个字段组合在一起,其中一个字段是相关记录

时间:2019-04-29 13:27:33

标签: c# .net-core

我有一个标题表和一个成员表,两者之间的关系很好。我希望能够在另一个控制器中加入两个字段的文本。

会员模型类

public string LastName { get; set; }
public Title Title { get; set; }
public string FullName => string.Format("{0} {1}", Title.TitleName, LastName); 

标题模型类

public int ID { get; set; }
public string TitleName { get; set; }
public ICollection<Member> Member { get; set; }

控制器中的选择列表部分

ViewData["MemberID"] = new SelectList(_context.Members, "ID", "FullName");

运行时,我得到的只是Title的空对象,而不是记录的相关标题名称。

在这种理解上我错了什么?

1 个答案:

答案 0 :(得分:0)

默认情况下,除非您明确告诉或设置为自动填充相关属性,否则EF不会填充相关属性。您基本上有三个选择:

渴望加载

正如@Progressive所说,

ViewData["MemberID"] = new SelectList(
    _context.Members.Include(member => member.Title),
    "ID",
    "FullName");

应该工作。

显式加载

如果您需要填充单个对象的导航属性,而对于集合则不需要那么多,因为该方法使用DbContext.Entry(...) API,因此此方法会很好用。

使用延迟加载代理

此方法将允许延迟加载所有可覆盖的导航属性。您唯一需要做的就是安装Microsoft.EntityFrameworkCore.Proxies软件包,并在构建UseLazyLoadingProxies()时通过调用DbContext方法启用它。完成之后,所有导航属性都应自动加载。

更多信息可以在MSDN中找到。