web-dev-qa-db-ja.com

更新ウィザードが応答しない

データベースからemdxを更新する必要があるたびに、更新ウィザードは、完了(更新の完了)ボタンを押すと応答しないと表示されるため、信じられないほどの時間がかかります。

Visual Studio 2015とLocalDb SQL Server 2014を使用しています。問題に対処するためにService Pack 1をインストールすることを提案した人もいました。 LocalDb用のSP1をインストールしましたが、助けにはなりません。 VS2015の私のインストールもかなり新しいです。

最新のEntity Framework 6バージョン(nugetから)があります。

37
Santhos

データベースの互換性レベルを110に設定するとうまくいきました。

互換性レベルを確認するには、次のスクリプトを実行します。

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

互換性レベルを設定するには、次のスクリプトを使用します。

alter database <YOUR_DB_NAME> set compatibility_level = 110
77
Santhos

DBで次を実行するとうまくいきました。

ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION=ON

次に、更新後、次を使用して設定を戻します。

ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION=OFF

これは、GithubのEF6リポジトリで このスレッド 以上です。

前者は私にとって非常にうまく機能したので、私はそれをテストしていませんが、次のスレッドも機能することが報告されていることに注意してください:

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

また、彼らはこれをSQL Serverチームに突き刺し、Microsoft Connectで この問題 を明らかにしました。

20

今日、同僚と私はウィザードをそのままにして、〜10分間更新しました。かなり時間がかかりましたが、完了しました。適切な権限がないとDBの互換性レベルを設定できないため、これが(現時点では)私たちにとって最適なソリューションです。

2
sparkyShorts

SQL Serverの互換性レベルまたはトレースフラグ9481を変更するオプションはありません。

EntityFramework Reverse POCO Generatorを試してみました。

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

これは構成可能な汎用T4テンプレートであり、現在まで非常にうまく機能します。

上記のトレースフラグのオプションもあります。

IncludeQueryTraceOn9481Flag = false; // SqlServer 2014がフリーズしているように見える場合、またはこのファイルの保存に時間がかかる場合は、これをtrueに設定してみてください(昇格した権限も必要です)。

皮肉なことに、フラグがオフの場合でも高速に動作します:) VS EF Designerと比較して、メタデータに異なるクエリを使用しているようです。

1
jens

I still 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)でこれを行う必要がありました。これはどのようにしてまだ解決されていないのですか?!

1
DMadden51

MariaDB Lethargic Manual Remedy

  • MariaDB 10.2に対してEF6、VisualStudio 2015を使用します。
  • @Santhosが示したように、私には膨大な時間を吹き飛ばしました。 VisualStudioは巨大なXMLファイルの解析が遅いようです(私の開発マシンには8GBのRAMしかありません)。冗談はありません。約15分で更新されます。
  • いくつかのファイルを手動で 'resetting'した後、GUIの更新を進めるとすぐに私がすぐに消えてしまうことを学びました。光沢のある新しいモデルを1〜2分で出入りします。

手動更新手順

  1. .edmx.diagramファイルの内容をEDMX Diagram Boilerplate以下で置き換えます
  2. .edmxファイルの内容をEDMX Runtime Boilerplateで置き換えます
  3. 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>
0
fusion27