Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF6级联对象设置非常慢_C#_Performance_Entity Framework - Fatal编程技术网

C# EF6级联对象设置非常慢

C# EF6级联对象设置非常慢,c#,performance,entity-framework,C#,Performance,Entity Framework,我在尝试检索数据时遇到实体框架问题。 我将工作分为多个步骤: 生成查询 执行它并从数据库检索数据集 使用数据集填写我的ViewModel 实际上,步骤1和步骤2非常快,步骤3最多需要1分钟(200条记录)。这意味着它与SQL无关(我将查询从调试器复制到MSSM,并在不到一秒钟的时间内执行)。 首先,我使用步骤3B,为了简单起见,我检索了一个Job实体,并将其转换为MapMarker对象。我认为是ConvertAll减慢了这个过程 经过一段时间的阅读,我用Select进行了测试,但结果是一样的。

我在尝试检索数据时遇到实体框架问题。 我将工作分为多个步骤:

  • 生成查询
  • 执行它并从数据库检索数据集
  • 使用数据集填写我的ViewModel
  • 实际上,步骤1和步骤2非常快,步骤3最多需要1分钟(200条记录)。这意味着它与SQL无关(我将查询从调试器复制到MSSM,并在不到一秒钟的时间内执行)。 首先,我使用步骤3B,为了简单起见,我检索了一个
    Job
    实体,并将其转换为
    MapMarker
    对象。我认为是
    ConvertAll
    减慢了这个过程

    经过一段时间的阅读,我用Select进行了测试,但结果是一样的。 唯一的问题是,如果我使用“主要对象”,在这个例子中:Job,一切都很快;作为测试,我将Job.Job_ID放入all字段,执行时间正常(不到一秒钟)。 然后我再次插入以下内容:
    ,Latitude=\u Job.Maintenance.equipment.Location.GPS.GPS\u Latitude.Value
    ,慢度又回来了

    我甚至尝试了使用foreach循环的步骤3C(我知道这不是更好,但还行…),但它和其他解决方案一样慢

    主要问题是: 我在EF6配置(或其他地方)中遗漏了什么使这个过程如此缓慢?

    我将用以前的好方法执行我自己的sql查询,我开始使用EF,我想这些实体应该是可用的,因为现在使用“简单”对象很好,但是如果你不能级联它们。。附加值是多少

    下面是我要说的步骤

    步骤1:

    IEnumerable<Job> Jobs = db.Job.Include(e => e.Maintenance.MaintenancePlan.MaintenanceType).Include(e => e.Maintenance.MaintenancePlan.MaintenanceType)
                    .Include(e => e.Maintenance.MaintenancePlan.MaintenanceType.Shape)
                    .Include(e => e.Maintenance.MaintenanceStatus)
                    .Include(e => e.Users)
                    .Include(e => e.Users.Color)
                    .Include(e => e.Maintenance.Equipement.Location.GPS);
    
    步骤3C:

    List<MapMarker> listMarkerJobs = new List<MapMarker>();
                foreach (Job _Job in Jobs)
                {
                    MapMarker A = new MapMarker();
                    A.ID = String.Format("Job_{0}", _Job.Job_ID);
                    A.Latitude = _Job.Maintenance.Equipement.Location.GPS.GPS_Latitude.Value:
                    A.Longitude = _Job.Maintenance.Equipement.Location.GPS.GPS_Longitude.Value;
                    A.Title = String.Format("{1}", (_Job.Users != null) ? String.Format("[{0}]", _Job.Users.Users_NickName) : "", _Job.Maintenance.Equipement.Equipement_Name);
                    A.Icon = MapMarker.GetIconePath((_Job.Users != null) ? _Job.Users.Color.Color_Name : "red", _Job.Maintenance.MaintenancePlan.MaintenanceType.Shape.Shape_Name, _Job.Maintenance.MaintenanceStatus.MaintenanceStatus_Description, "13px");
                    A.IconSize = new System.Drawing.Size(13, 13);
                    A.WindowInfoContent = String.Format("JobID= {0}", _Job.Job_ID);
                    listMarkerJobs.Add(A);
                }
    
    List listMarkerJobs=new List();
    foreach(Job _jobin Jobs)
    {
    MapMarker A=新的MapMarker();
    A.ID=String.Format(“Job{0}”,Job.Job\u ID);
    A.纬度=_作业。维护。设备。位置。GPS。GPS_纬度。值:
    A.经度=_Job.Maintenance.equipment.Location.GPS.GPS_Longitude.Value;
    A.Title=String.Format(“{1}”,(\u Job.Users!=null)?String.Format(“[{0}]”,\u Job.Users.Users\u昵称):“”,\u Job.Maintenance.equipment\u Name);
    A.Icon=MapMarker.GetIconePath((_Job.Users!=null)?_Job.Users.Color.Color_Name:“红色”、_Job.MaintenancePlan.MaintenanceType.Shape.Shape_Name、_Job.MaintenanceStatus.MaintenanceStatus_Description,“13px”);
    A.IconSize=新系统图纸尺寸(13,13);
    A.WindowInfoContent=String.Format(“JobID={0}”,\u Job.Job\u ID);
    添加(A);
    }
    
    在第3部分中试试这个

    List<MapMarker> listMarkerJobs = Jobs.AsNoTracking().Select(_Job => new MapMarker
    {
        ID = string.Format("Job_{0}", _Job.Job_ID),
        Latitude = _Job.Maintenance.Equipement.Location.GPS.GPS_Latitude.Value,
        Longitude = _Job.Maintenance.Equipement.Location.GPS.GPS_Longitude.Value
    }).ToList();
    
    List listMarkerJobs=Jobs.AsNoTracking()。选择(\u Job=>new MapMarker
    {
    ID=string.Format(“Job_{0}”,_Job.Job_ID),
    纬度=_Job.Maintenance.equipment.Location.GPS.GPS_lation.Value,
    经度=_Job.Maintenance.equipment.Location.GPS.GPS_longide.Value
    }).ToList();
    
    在第3部分中试试这个

    List<MapMarker> listMarkerJobs = Jobs.AsNoTracking().Select(_Job => new MapMarker
    {
        ID = string.Format("Job_{0}", _Job.Job_ID),
        Latitude = _Job.Maintenance.Equipement.Location.GPS.GPS_Latitude.Value,
        Longitude = _Job.Maintenance.Equipement.Location.GPS.GPS_Longitude.Value
    }).ToList();
    
    List listMarkerJobs=Jobs.AsNoTracking()。选择(\u Job=>new MapMarker
    {
    ID=string.Format(“Job_{0}”,_Job.Job_ID),
    纬度=_Job.Maintenance.equipment.Location.GPS.GPS_lation.Value,
    经度=_Job.Maintenance.equipment.Location.GPS.GPS_longide.Value
    }).ToList();
    
    我相信您的代码中存在N+1问题,请尝试分析EF生成的SQL查询,以查看是否忘记将某些表包含到查询中。我相信您的代码中存在N+1问题,请尝试分析EF生成的SQL查询,以查看是否忘记将某些表包含到查询中。
    List<MapMarker> listMarkerJobs = new List<MapMarker>();
                foreach (Job _Job in Jobs)
                {
                    MapMarker A = new MapMarker();
                    A.ID = String.Format("Job_{0}", _Job.Job_ID);
                    A.Latitude = _Job.Maintenance.Equipement.Location.GPS.GPS_Latitude.Value:
                    A.Longitude = _Job.Maintenance.Equipement.Location.GPS.GPS_Longitude.Value;
                    A.Title = String.Format("{1}", (_Job.Users != null) ? String.Format("[{0}]", _Job.Users.Users_NickName) : "", _Job.Maintenance.Equipement.Equipement_Name);
                    A.Icon = MapMarker.GetIconePath((_Job.Users != null) ? _Job.Users.Color.Color_Name : "red", _Job.Maintenance.MaintenancePlan.MaintenanceType.Shape.Shape_Name, _Job.Maintenance.MaintenanceStatus.MaintenanceStatus_Description, "13px");
                    A.IconSize = new System.Drawing.Size(13, 13);
                    A.WindowInfoContent = String.Format("JobID= {0}", _Job.Job_ID);
                    listMarkerJobs.Add(A);
                }
    
    List<MapMarker> listMarkerJobs = Jobs.AsNoTracking().Select(_Job => new MapMarker
    {
        ID = string.Format("Job_{0}", _Job.Job_ID),
        Latitude = _Job.Maintenance.Equipement.Location.GPS.GPS_Latitude.Value,
        Longitude = _Job.Maintenance.Equipement.Location.GPS.GPS_Longitude.Value
    }).ToList();