当我尝试如此访问数据库上下文时,我可以通过结果访问其他表:
MyEntities myEnt = new MyEntities();
var comments = myEnt.Comments.Where(x=>x.UserName == UserName);
foreach(Comment comment in comments){
string FirstName = comment.UserProfile.FirstName;
}
我的智能感知提取了外键映射,并允许我访问联接的表
UserProfile
。与通过这样的联接执行标准linq查询相反,以这种方式“链接”我的结果是一种不好的做法:var query = from comments in myEnt.Comments
join up in myEnt.UserProfiles on comments.UserId equals up.UserId
select new {...}
更新
还有,如果我进一步深入该怎么办,例如:
comment.aspnet_Users.UserProfiles.UserRatings.ToList()
我尝试了类似的方法,并且在第二次尝试这种方法时,查询花费的时间似乎更长。智能感知使您可以深入了解相关表,如果我通过多个表进行链接,这是否会影响速度?
最佳答案
我建议调查MiniProfiler
根据您的问题,底层提供程序有可能在循环期间引起N+1 问题,这在ORM世界中被认为是一种不良做法。foreach(Comment comment in comments){ string FirstName = comment.UserProfile.FirstName; }
在执行where语句以在每个结果中急切加载UserProfiles时,也可以使用include:var comments = myEnt.Comments.Where(x=>x.UserName == UserName);
像这样:var comments = myEnt.Comments.Include('UserProfile').Where(x=>x.UserName == UserName);
关于c# - 链接我的实体结果的错误做法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14127679/