更新向导没有响应
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 分钟。
手动刷新步骤
- 将
.edmx.diagram
文件的内容替换为下面的 EDMX 图样板
- 将
.edmx
文件的内容替换为下面的 EDMX Runtime Boilerplate
- 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 或内存太低,无法完成任务。
检查 运行 您的数据库的服务器。
每次我需要从数据库更新我的 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 分钟。
手动刷新步骤
- 将
.edmx.diagram
文件的内容替换为下面的 EDMX 图样板 - 将
.edmx
文件的内容替换为下面的 EDMX Runtime Boilerplate - 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 或内存太低,无法完成任务。
检查 运行 您的数据库的服务器。