我有一个标题表和一个成员表,两者之间的关系很好。我希望能够在另一个控制器中加入两个字段的文本。
会员模型类
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的空对象,而不是记录的相关标题名称。
在这种理解上我错了什么?
答案 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中找到。