Apu*_*pta 7 c# sql-server asp.net-mvc performance entity-framework
我需要找到特定用户的不同广告系列.用户拥有CodeRights,CodeRights包含包含Campaign的代码和代码.这是CodeRight类
public class SmartCodeRight
{
[Key, Column(Order = 1)]
public long UserId { get; set; }
public virtual User User { get; set; }
[Key, Column(Order = 2)]
public long CodeId { get; set; }
public virtual SmartCode Code { get; set; }
public CodeRight CodeRight { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我会为此编写以下SQL:
SELECT *
FROM campaigns
WHERE campaignid IN (SELECT DISTINCT campaignid
FROM smartcodes t1
INNER JOIN smartcoderights t2 ON t1.codeId = t2.codeId
WHERE t2.userid = @userId)
Run Code Online (Sandbox Code Playgroud)
使用EF我正在写这段代码:
var v = user.CodeRights.Select(r => r.Code.Campaign).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
现在,在分析时,我发现EF正在为每个存在的CodeRight执行2个SQL查询.
我还计算了整个执行的时间,EF使用ADO.Net需要大约400毫秒,它只有~8.
现在我的问题是,如果EF真的很慢或者我做错了什么?
编辑
正在为每个CodeRight执行以下两个块
exec sp_executesql N'SELECT
[Extent1].[CodeId] AS [CodeId],
[Extent1].[CodeTitle] AS [CodeTitle],
[Extent1].[CodeContent] AS [CodeContent],
[Extent1].[CreatedOn] AS [CreatedOn],
[Extent1].[IsActive] AS [IsActive],
[Extent1].[Deleted] AS [Deleted],
[Extent1].[OwnerId] AS [OwnerId],
[Extent1].[Tags] AS [Tags],
[Extent1].[CampaignId] AS [CampaignId]
FROM [dbo].[SmartCodes] AS [Extent1]
WHERE [Extent1].[CodeId] = @EntityKeyValue1',N'@EntityKeyValue1 bigint',@EntityKeyValue1=24
go
Run Code Online (Sandbox Code Playgroud)
和
exec sp_executesql N'SELECT
[Extent1].[CampaignId] AS [CampaignId],
[Extent1].[Name] AS [Name],
[Extent1].[Description] AS [Description],
[Extent1].[AdminId] AS [AdminId]
FROM [dbo].[Campaigns] AS [Extent1]
WHERE [Extent1].[CampaignId] = @EntityKeyValue1',N'@EntityKeyValue1 int',@EntityKeyValue1=12
go
Run Code Online (Sandbox Code Playgroud)
mat*_*mmo 10
您应该花时间查看实体框架的获取计划.要使EF执行连接,您必须使用Include关键字.
当你得到你的user对象时,它必须是你的初始查询的一部分:
var user = context.Users
.Include("CodeRights.Code")
.Include("CodeRights.Campaign")
.FirstOrD??efault(u => u.Id == id);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1995 次 |
| 最近记录: |