更新向导没有响应

Update wizard not responding

每次我需要从数据库更新我的 emdx 时,更新向导都会花费大量时间来完成,一旦您点击完成(完成更新)按钮,它就会呈现出没有响应的状态。

我使用 Visual Studio 2015 和 LocalDb SQL Server 2014。有人建议安装 Service Pack 1 来解决这个问题。我已经为 LocalDb 安装了 SP1,但没有帮助。我安装的VS2015也比较新

我有最新的 Entity Framework 6 版本(来自 nuget)。

将数据库的兼容级别设置为 110 对我有用。

要检查兼容性级别,运行 这个脚本:

select compatibility_level from sys.databases where name = '<YOUR_DB_NAME>'

要设置兼容级别,请使用此脚本:

alter database <YOUR_DB_NAME> set compatibility_level = 110

更改 SQL 服务器兼容性级别或跟踪标志 9481 对我来说不是选项。

我尝试了 EntityFramework 反向 POCO 生成器

https://visualstudiogallery.msdn.microsoft.com/ee4fcff9-0c4c-4179-afd9-7a2fb90f5838

它是一个可配置的通用 T4 模板,到目前为止运行良好。

它甚至有一个用于提到的跟踪标志的选项

IncludeQueryTraceOn9481Flag = false; // If SqlServer 2014 appears frozen / take a long time when this file is saved, try setting this to true (you will also need elevated privileges).

具有讽刺意味的是,即使标志关闭,它也能快速运行 :) 与 VS EF Designer 相比,他们似乎对元数据使用不同的查询。

今天,我和我的同事不理会向导,让它更新约 10 分钟。虽然花了很长时间,但它确实完成了。这对我们来说是最好的解决方案(目前),因为我们无法在没有适当权限的情况下设置数据库的兼容级别。

运行 数据库中的以下内容对我有用:

ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION=ON

然后,在更新后,使用以下方法将其设置回来:

ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION=OFF

这是 this thread 在 Github 上的 EF6 存储库中得出的。

应该注意的是,尽管我没有测试过,但该线程中也报告了以下内容可以工作,因为前者对我来说效果很好:

UPDATE STATISTICS sys.syscolpars
UPDATE STATISTICS sys.sysschobjs
UPDATE STATISTICS sys.syssingleobjrefs
UPDATE STATISTICS sys.sysiscols

他们还把这个反馈给了 SQL 服务器团队,并在 Microsoft Connect 上开放了 this issue

仍然 必须使用 Entity Framework 6.2.0 与 Microsoft SQL Server 2014 (SP2-GDR) (KB4019093) - 12.0.5207.0 (X64) Jul 3 2017 02:25:44 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor) 一起执行此操作。这世界上怎么还没解决?!

MariaDB 昏昏欲睡手动补救措施

  • 针对 MariaDB 10.2 使用 EF6、VisualStudio 2015。
  • 正如@Santhos 所说,浪费了我很多时间。似乎 VisualStudio 在解析那个巨大的 XML 文件时很慢(我的开发机器只有 8gb RAM)。不开玩笑,刷新大概15分钟
  • 我了解到手动 'resetting' 几个文件,然后继续进行 GUI 更新使我很快就消失了。我进出闪亮的新模型 ~1-2 分钟。

手动刷新步骤

  1. .edmx.diagram 文件的内容替换为下面的 EDMX 图样板
  2. .edmx 文件的内容替换为下面的 EDMX Runtime Boilerplate
  3. Return 到 VisualStudio,双击您的 EDMX > 在空白屏幕中右键单击 > 从数据库更新模型

EDMX 图样板

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
 <!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
  <edmx:Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx">
    <!-- Diagram content (shape and connector positions) -->
    <edmx:Diagrams>
      <Diagram DiagramId="820459acb0f543cfaf7db8643f38c2d6" Name="Diagram1" ZoomLevel="85">
        </Diagram>
    </edmx:Diagrams>
  </edmx:Designer>
</edmx:Edmx>

EDMX 运行时样板

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
  <!-- EF Runtime content -->
  <edmx:Runtime>
    <!-- SSDL content -->
    <edmx:StorageModels>
    <Schema Namespace="ShareDirectModel.Store" Provider="MySql.Data.MySqlClient" ProviderManifestToken="5.5" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl">
        <EntityContainer Name="ShareDirectModelStoreContainer">
          </EntityContainer>
      </Schema></edmx:StorageModels>
    <!-- CSDL content -->
    <edmx:ConceptualModels>
      <Schema Namespace="ShareDirectModel" Alias="Self" annotation:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
        <EntityContainer Name="ShareDirectContext" annotation:LazyLoadingEnabled="true">
          </EntityContainer>
        </Schema>
    </edmx:ConceptualModels>
    <!-- C-S mapping content -->
    <edmx:Mappings>
      <Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2009/11/mapping/cs">
        <EntityContainerMapping StorageEntityContainer="ShareDirectModelStoreContainer" CdmEntityContainer="ShareDirectContext">
          </EntityContainerMapping>
      </Mapping>
    </edmx:Mappings>
  </edmx:Runtime>
  <!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
  <Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx">
    <Connection>
      <DesignerInfoPropertySet>
        <DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" />
      </DesignerInfoPropertySet>
    </Connection>
    <Options>
      <DesignerInfoPropertySet>
        <DesignerProperty Name="ValidateOnBuild" Value="true" />
        <DesignerProperty Name="EnablePluralization" Value="true" />
        <DesignerProperty Name="IncludeForeignKeysInModel" Value="true" />
        <DesignerProperty Name="UseLegacyProvider" Value="false" />
        <DesignerProperty Name="CodeGenerationStrategy" Value="None" />
        <DesignerProperty Name="DDLGenerationTemplate" Value="$(VSEFTools)\DBGen\SSDLToMySQL.tt" />
      </DesignerInfoPropertySet>
    </Options>
    <!-- Diagram content (shape and connector positions) -->
    <Diagrams></Diagrams>
  </Designer>
</edmx:Edmx>

这种问题一般是因为服务器运行 SQL本身的服务器不好。 可能服务器上的磁盘 space 或内存太低,无法完成任务。

检查 运行 您的数据库的服务器。