c# - 链接我的实体结果的错误做法

标签 c# asp.net linq entity-framework

当我尝试访问我的数据库上下文时,我能够通过我的结果访问其他表:

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/

相关文章:

c# - 无需安装的 C++ 数据库访问

C# lambda 调用 for 循环引用最后一个对象

ASP.NET 上下文重写路径 404 错误

.net - 使用 Func<> 提高代码可读性的机会

c# - LINQ 数据源在什么时候确定?

c# - 适用于 Windows 的 HID 终端

c# - ASP.NET vNext - MissingMethodException : Method not found: Microsoft. CodeAnalysis.Diagnostic> EmitResult.get_Diagnostics()'

c# - ASP.Net 中哪个更快?

c# - 如何构建安装程序来更新 ASP.NET 的 web.config、DLL、文件等

C# - XDocument/对象的链接