相关疑难解决方法(0)

如何查看实体框架生成的SQL?

如何查看实体框架生成的SQL?

(在我的特殊情况下,我正在使用mysql提供程序 - 如果它很重要)

ado.net entity-framework

587
推荐指数
18
解决办法
29万
查看次数

如何使用Entity Framework 7记录查询?

我在夜间构建频道上使用Entity Framework 7(现在我正在使用版本EntityFramework.7.0.0-beta2-11524)并且我试图仅仅出于好奇而记录EF生成的查询.

我正在编写一个简单的控制台程序,我尝试使用 EF6 相同的日志记录技术,但DbContext.Database.Log在Entity Framework 7上不可用.有没有办法记录或只是看看EF7生成的SQL?

entity-framework entity-framework-core

13
推荐指数
4
解决办法
1万
查看次数

Entity Framework Core 3.0 查询导致“SqlException: 'Execution Timeout Expired'”和 tempdb 变满。适用于 EF Core 2.2.6

我正在 Microsoft Entity Framework Core 3.0 中运行一个相当简单的查询,如下所示:

var dbProfile = db.Profiles.Where(x => x.SiteId == Int32.Parse(id))
    .Include(x => x.Interests)
    .Include(x => x.Pets)
    .Include(x => x.Networks)
    .Include(x => x.PersonalityTraits)
    .SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

它在 EF Core 2.2.6 上运行良好,但是当升级到 EF Core 3.0 时,此查询会立即针对 721 个配置文件运行,但对于至少一个配置文件,查询超时:

Microsoft.Data.SqlClient.SqlException: '执行超时已过期。
操作完成之前超时时间已过或服务器没有响应。

然后我记录了发送到数据库服务器的实际查询:

/sf/answers/4084371161/

SELECT [t].[Id], [t].[Age], [t].[City], [t].[Country], [t].[County], [t].[DeactivatedAccount], [t].[Gender], [t].[HasPictures], [t].[LastLogin], [t].[MemberSince], [t].[PresentationUpdated], [t].[ProfileName], [t].[ProfilePictureUrl], [t].[ProfileText], [t].[SiteId], [t].[VisitorsCount], [i].[Id], [i].[Name], [i].[ProfileId], [p0].[Id], [p0].[Description], [p0].[Name], [p0].[ProfileId], [n].[Id], [n].[Name], [n].[NetworkId], [n].[ProfileId], [p1].[Id], [p1].[Name], [p1].[ProfileId]
FROM (
    SELECT TOP(2) [p].[Id], …
Run Code Online (Sandbox Code Playgroud)

c# sql-server entity-framework entity-framework-core entity-framework-core-3.0

7
推荐指数
1
解决办法
5257
查看次数

Include() 与 Select() 性能

我有一个父实体,具有子实体的导航属性。只要子实体中存在关联记录,父实体就不能被删除。子实体可以包含数十万条记录。

我想知道在实体框架中最有效的做法是什么:

var parentRecord = _context.Where(x => x.Id == request.Id)
                           .Include(x => x.ChildTable)
                           .FirstOrDefault();

// check if parentRecord exists

if (parentRecord.ChildTable.Any()) {
  // cannot remove
}
Run Code Online (Sandbox Code Playgroud)

或者

var parentRecord = _context.Where(x => x.Id == request.Id)
                            .Select(x => new {
                                  ParentRecord = x,
                                  HasChildRecords = x.ChildTable.Any()
                            })
                           .FirstOrDefault();

// check if parentRecord exists

if (parentRecord.HasChildRecords) {
  // cannot remove
}
Run Code Online (Sandbox Code Playgroud)

第一个查询可能包含数千条记录,而第二个查询则不会,但是第二个查询更复杂。

哪种方法最好?

c# entity-framework

6
推荐指数
1
解决办法
3892
查看次数