【发布时间】:2015-11-13 04:16:59
【问题描述】:
我正在使用 EF6/.Net 4.5.1 来检索 web 表单上用户控件中的列表视图的数据。我已经使用 FK 属性修改了 ApplicationUser 以包含一个导航属性 [1:1],效果很好。
public class ApplicationUser : IdentityUser
{
public ApplicationUser()
{
CreateDate = DateTime.Now;
:\\ deleted stuff
}
public int TaxID { get; set; }
public System.Guid ApplicationId { get; set; }
:\\ deleted stuff
[ForeignKey("TaxID")]
public virtual Personnel Personnel { get; set; }
}
模型已迁移并针对存储和检索进行了测试。
完全回发一切正常。
但是,我在网页上添加了一个按钮,用于打开和关闭一个 div,该 div 包含一个负责创建新成员的 UserControl。 UserControl 引发由容器使用的事件。 Container 然后关闭包含 UC 的 div,用 Listview 重新打开 div,调用 Listview DataBind(),后者调用 GetAllUsers()。
代码:
public IQueryable<ApplicationUser> GetAllUsers()
{
var manager = HttpContext.Current.GetOwinContext()
.GetUserManager<ApplicationUserManager>();
var users = manager.Users.OrderBy(c => c.TaxID);
return users;
}
UserControl 将控制权返回给 Container 后出现问题。
第一次检索 - 始终有一个未加载 Navigation 属性的 ApplicationUser。这意味着某些字段永远不会填充到列表视图中。
然而,后续检索(刷新页面或调用编辑行)似乎会触发导航属性出现。
如何强制 EF 包含导航属性。此上下文中不存在语法 manager.Users.Include()。
只有作为 ApplicationUser 的动态代理列出的实体似乎具有导航属性。所以我很困惑为什么初始检索永远不是动态代理。
列表视图的 Datapager 需要一个 IQueryable 来实现其分页。我不调用 .ToList() ,因为 Datapager 知道什么时候该调用它一直工作得很好......一旦有一个完整的页面刷新。为什么要实现导航属性需要刷新页面?
任何帮助...在此先感谢...
【问题讨论】:
标签: c# asp.net entity-framework webforms asp.net-identity