我需要在EF版本1中创建实体数据模型,因为我的Web主机尚未安装Framework 4.0。下面只是一个显示问题的简单示例。
我有3个表,一个Users表,另一个Webpages表和一个带Visits的表。前两个表每个都与Visits表有一对多的关系(它基本上用作多对多关系,只有Visits表有自己的主键和额外字段)
使用4.0版本可行,但不适用于v.1。 “Visits”的计数为0,因此测试字符串返回“”...为什么,以及如何在v.1中访问外键关系?
UsersEntities context = new UsersEntities();
var users = context.Users;
string result = "";
foreach (var user in users)
{
foreach (var visit in user.Visits)
{
result += visit.Webpage.Url + "\n";
}
}
因此foreach循环遍历用户,它可以正常运行,但内部循环从未输入,因为没有返回任何访问。同样,在Framework 4.0中,它使用相同的数据库工作正常。
那有什么不对?
答案 0 :(得分:2)
只需将您的代码更改为:
UsersEntities context = new UsersEntities();
var users = context.Users.Include("Visits");
string result = "";
foreach (var user in users)
{
foreach (var visit in user.Visits)
{
result += visit.Webpage.Url + "\n";
}
}
注意Include(...)告诉EF热切地加载每个用户的访问。
有了它,它应该有用。
实际上,如果网页也是导航,您可能需要:
Include("Visits.Webpage");
希望这有效