首先介绍背景:我在Windows 10 Pro笔记本电脑上,使用Visual Studio 2015中的基于数据库的EF6模型(最新的nuget 6.1.3指向本地SQL Server 2014 SP1 Express数据库)。我从Windows 8.1和Visual Studio 2013升级过来。大约6个月前,我也将模型从EF5升级到了EF6,但我认为这与问题无关,因为我也尝试过从头开始重建。
模型:大约100个表格、50个视图和250个关联。
问题是每次我想对我的模型进行更改时,单击(左键或右键).edmx
图会导致Visual Studio停止响应数分钟。我已经将我能够移动到另一个没有此问题的图表(主要是没有关联的视图)上的所有内容都移动了过去,因此我认为关联数是问题所在。其中大多数是从数据库中获取的必需外键关联。然而,将3个FK关联连接到我的主图表上的视图需要约半个小时的时间。我可以理解模型中存在实体数限制,但我不明白为什么单击图表就会导致Visual Studio停止响应。任务管理器显示CPU使用率高,但没有磁盘使用率。
单击任何实体都没问题,移动或编辑它们也没问题。问题在于单击背景画布。
我已经开始通过模型浏览器从数据库更新模型,但我无法避免使用右键单击图表来创建新关联。
我没在任何地方看到关于这个问题的评论。有什么原因或解决方法建议吗?
顺便说一下,我刚刚重新安装了Windows 10 Pro,并仅安装了SQL Server 2014 SP1 Express和Visual Studio 2105 Pro。所以我的系统上没有任何自定义设置。
更新:当DevEnv.exe停止响应时,ProcDump提供了此堆栈跟踪信息,建议搜索图形对象的本机代码:
[External Code]
[Managed to Native Transition]
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.GraphObject.14.0.dll!<Module>.GeoSCursor.search(GeoSCursor* value)
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.GraphObject.14.0.dll!Microsoft.VisualStudio.Modeling.Diagrams.GraphObject.VGGraph.GetObjectsInRect(LRECT bbox, Microsoft.VisualStudio.Modeling.Diagrams.GraphObject.VGLayoutObjectList items, VSGLayoutObject** ignoreItems, int numberItems, int numbertypes, int* types, bool searchSubGraphs)
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.GraphObject.14.0.dll!Microsoft.VisualStudio.Modeling.Diagrams.GraphObject.VGGraph.GetObjectsInRect(LRECT bbox, Microsoft.VisualStudio.Modeling.Diagrams.GraphObject.VGLayoutObjectList items, VSGLayoutObject** ignoreItems, int numberItems, int numbertypes, int* types, bool searchSubGraphs)
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.GraphObject.14.0.dll!Microsoft.VisualStudio.Modeling.Diagrams.GraphObject.VGGraph.get_ObjectsInRectangle(double x0, double y0, double x1, double y1, bool searchSubGraphs)
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.14.0.dll!Microsoft.VisualStudio.Modeling.Diagrams.GraphWrapper.HitTest(Microsoft.VisualStudio.Modeling.Diagrams.RectangleD hitArea, bool requireCompleteContainment, bool searchSubGraphs)
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.14.0.dll!Microsoft.VisualStudio.Modeling.Diagrams.GraphWrapper.SpatialQuery(Microsoft.VisualStudio.Modeling.Diagrams.GraphWrapper.SpatialDirection direction, Microsoft.VisualStudio.Modeling.Diagrams.ShapeElement currentShape, Microsoft.VisualStudio.Modeling.Diagrams.ShapeElement parentShape)
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.14.0.dll!Microsoft.VisualStudio.Modeling.Diagrams.ShapeElement.FindNextInChildShapes(Microsoft.VisualStudio.Modeling.Diagrams.ShapeElement startFromChildShape, bool focusableRequired)
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.14.0.dll!Microsoft.VisualStudio.Modeling.Diagrams.ShapeAccessibleObject.GetChild(int index)
System.Windows.Forms.dll!System.Windows.Forms.AccessibleObject.GetFocused()
System.Windows.Forms.dll!System.Windows.Forms.AccessibleObject.Accessibility.IAccessible.accFocus.get()
System.Windows.Forms.dll!System.Windows.Forms.InternalAccessibleObject.System.Windows.Forms.UnsafeNativeMethods.IAccessibleInternal.get_accFocus()
更新2:XtraSimplicity提供了一种对某些人有效的解决方案,但对我无效。感谢他的建议,我已经排除了直接图形驱动程序问题。我在笔记本电脑上有英特尔HD Graphics Family和NVIdia GeForce GT 750M显示适配器。Intel是通常的主动适配器,但仅启用NVidia时问题也会出现。我还尝试了在Visual Studio中禁用硬件支持的建议,但这只会使得打开edmx时VS的性能变得更糟。