当我尝试访问我的数据库上下文时,我能够通过我的结果访问其他表:
MyEntities myEnt = new MyEntities();
var comments = myEnt.Comments.Where(x=>x.UserName == UserName);
foreach(Comment comment in comments){
string FirstName = comment.UserProfile.FirstName;
}
我的 intellisense 提取外键映射并允许我访问连接表 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()
我尝试了类似的方法,当我在第二次尝试这种方法时,查询似乎花费了更长的时间。 intellisense 让您可以在相当多的地方追踪到相关表格,如果我像这样链接多个表格,这是否会影响速度?
最佳答案
我建议调查 MiniProfiler
根据您的问题,底层提供商可能会导致 N+1 在循环期间发出问题,这在 ORM 世界中被认为是一种不好的做法。
foreach(在评论中评论评论){
string FirstName = comment.UserProfile.FirstName;
}
您还可以在执行 where 语句时使用 include 来在每个结果中急切加载 UserProfiles:
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/