当我尝试如此访问数据库上下文时,我可以通过结果访问其他表:

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/

10-13 05:13