【问题标题】:EntityFramework MySQL retrieves results for countingEntityFramework MySQL 检索结果进行计数
【发布时间】:2015-03-15 16:41:12
【问题描述】:

我将 EntityFramework 6 与官方 MySQL 提供程序一起使用。

我有一个数据库,其中包含一个场地计划列表,每个场地计划都由区域组成。 为了显示这些值,我使用了这个非常简单的 LINQ 查询:

model.VenuePlans = CurrentOrganization.VenuePlans.Select(p => new ViewModels.VenuePlans.IndexViewModel.VenuePlan
    {
        ID = p.MaskID,
        Name = p.DisplayName,
        AreaCount = p.VenuePlans_Areas.Count()
    }).ToArray();

但是当使用 MiniProfiler 查看执行的查询时,我发现这会导致重复查询,如下所示:

检索场地计划:

SELECT
`Extent1`.`PlanID`, 
`Extent1`.`MaskID`, 
`Extent1`.`DisplayName`, 
`Extent1`.`OrganizationID`, 
`Extent1`.`SVG`
FROM `VenuePlans` AS `Extent1`
 WHERE `Extent1`.`OrganizationID` = @EntityKeyValue1

检索第一个 VenuePlan 的区域:

SELECT
`Extent1`.`AreaID`, 
`Extent1`.`PlanID`, 
`Extent1`.`DisplayName`, 
`Extent1`.`MaskID`, 
`Extent1`.`FillColor`, 
`Extent1`.`InternalName`
FROM `VenuePlans_Areas` AS `Extent1`
 WHERE `Extent1`.`PlanID` = @EntityKeyValue1

现在对数据库中存在的每个区域重复后一个查询。

CurrentOrganization 是之前检索到的另一个模型的实例。 现在直接在 DbContext 实例上编写查询时,我没有这个问题:

model.VenuePlans = DbContext.VenuePlans
        .Where(p => p.OrganizationID == CurrentOrganization.OrganizationID)
        .Select(p => new ViewModels.VenuePlans.IndexViewModel.VenuePlan
        {
            ID = p.MaskID,
            Name = p.DisplayName,
            AreaCount = p.VenuePlans_Areas.Count()
        }).ToArray();

这是什么原因?

DbContext 是在我的 BaseController 中声明的变量,它返回存储在 HttpRequest.Items 中的当前 DbContext 的实例。

我可以做些什么来防止这种行为?

【问题讨论】:

    标签: c# mysql linq entity-framework count


    【解决方案1】:

    我从未发现 MySql Linq 的东西非常好。我最近使用了它,并且不得不在我希望阻止生成的查询产生乱码之前使用 ToList。

    知道 Linq to MySql 已损坏,而且不仅仅是您自己,您最好使用从您的上下文而不是从您的对象中流动的查询版本。

    话虽如此,我很想看看是否有人有解决方案,因为我在使用 MySql 时倾向于避免使用 Linq。

    【讨论】:

    • 我确实发现最好直接在上下文中自己编写连接等,而不是依赖 Linq to MySQL。感谢上帝的 Miniprofiler,我永远不会知道它有那么糟糕 ;-)
    • 这两个场景在效果上是相同的,这里的问题是MySql Linq。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 2011-06-28
    • 2021-04-06
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多