9

MySQLでデータベースを構築し、Entity Frameworkを使用してデータベースをマップしようとしていますが、EFコンテキストに約20を超えるテーブルを追加しようとすると、「GenerateSSDLException」が発生し始めます。

データベースからの更新中に、タイプ'Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine+GenerateSSDLException'の例外が発生しました。例外メッセージは次のとおりです。'コマンド定義の実行中にエラーが発生しました。詳細については、内部例外を参照してください。

コマンドの実行中に致命的なエラーが発生しました。

タイムアウトが期限切れになりました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。

影響を受けるテーブルについて特別なことは何もありません。同じテーブルになることはありません。特定の(特定されていない)数のテーブルが追加された後、「Timeoutexpired」エラーなしでコンテキストを更新できなくなります。テーブルが1つだけ残っている場合もあれば、3つ残っている場合もあります。結果はかなり予測不可能です。さらに、エラーの前に追加できるテーブル数の差異は、おそらく問題は、既存のテーブル定義と新しいテーブルの両方を含むコンテキストを更新するために生成されるクエリのサイズにあることを示しています。それに追加されています。基本的に、SQLクエリが大きくなりすぎて、何らかの理由で実行に失敗しています。

EdmGen2を使用してモデルを生成すると、エラーは発生しませんが、生成されたEDMXファイルは、前述の例外を生成せずにVisualStudio内で更新できません。

EdmGen2が正常に動作することを考えると、おそらくこの問題の原因はVisual Studio内のツールにありますが、私はそうではないように思われるため、この非常にユニークな問題に取り組む方法について他の人がアドバイスを提供してくれることを期待しています。それを経験している唯一の人

同僚が提案した提案の1つは、テーブルのクロスオーバーを使用して2つの別々のEBMXファイルを維持することでしたが、私の意見ではかなり醜い修正のようです。これが「新技術」を使おうとして得たものだと思います。:(

4

7 に答える 7

12

私はちょうど午後ずっとこの問題に頭を悩ませていました。ただし、EF desinger接続が「デフォルトコマンドタイムアウト= 300000;」として存在するapp.configまたはweb.configにステートメントを追加するだけでよいという解決策を見つけました。問題はなくなりました。

于 2009-12-07T10:48:40.103 に答える
5

上記のアドバイスは正しくありません。

Default Command Timeout変更する必要がある唯一の接続文字列パラメータです。Connect Timeそもそも接続を取得するのを待つ時間を調整するだけです。それはあなたの問題ではありません。

Default Command TimeoutConnector /Net6.3.4との接続文字列には影響がないようです。これはConnector/Netのバグだと思い、Oracleにバグレポートを提出しました。編集:このバグはMySql開発者によって認識され、2010年10月13日に修正されました。6.0.8、6.1.6、6.2.5、および6.3.5に修正が加えられました。

これを回避する唯一の方法は、ObjectContextオブジェクトのCommandTimeoutプロパティをnull以外のものに変更することでした。nullの場合、MSDNごとの「基になるプロバイダー」の値を使用することになっています。nullでない場合は、タイムアウト前の秒数の信頼できる値です。

例えば:

var context = new CitationData.de_rawEntities();
context.CommandTimeout = 180;
于 2010-09-15T19:44:15.640 に答える
1

問題を簡単に解決する方法を説明していないあなたたちは弱いです:

  1. すべてのデータ接続を削除します
  2. 最新の MySql コネクタ (6.3.x) をダウンロードします。
  3. Visual Studio を開く > サーバー エクスプローラー > [データ接続] を右クリック > 接続の追加
  4. MySQL データベース プロバイダーの選択
  5. 接続の詳細を入力
  6. 「進む」をクリック
  7. 接続タイムアウトを見つけて、30,000 のようにします。
  8. デフォルトのコマンド タイムアウトを見つけて、30,000 のようにします。

すべてを保存してから、EF モデルをもう一度更新してみてください。これを EF 4.0 と Vs2010 でテストしたので、動作することがわかりました。

于 2010-03-17T22:29:15.503 に答える
1

上記の解決策をすべて試してみましたが、役に立ちませんでした。MySQL 用の最新の .NET コネクタ (6.3.6) をダウンロードしたところ、問題は解消されました。

于 2011-01-07T19:36:53.753 に答える
1

チェックアウト:

http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/

おっと、このリンクが既に投稿されていることに気付きました! ごめん

また、「同僚が提供した1つの提案は、いくつかのテーブルクロスオーバーを持つ2つの別々のEBMXファイルを維持することでした」とも強く考えます

醜いかもしれませんが、うまくいくはずです!

于 2009-11-23T21:19:48.213 に答える
0

2 つの可能性が思い浮かびます。

1 つ目は、EF バージョン 1 (.NET 3.5 SP 1 に同梱) であることです。これこれを参照してください。

もう 1 つは、これは SQL Server とそれ以前の ODBC ドライバー (1991 年頃) で発生したのとほぼ同じ症状のように感じられることです。ここでは、間違ったタイプの呼び出しが使用されましselectた。 —結果を返さない ( create table)。最終的に、接続は絶望的に非同期になり、SELECT の結果を対応するクエリに一致させようとしました。(当時、ブルー スクリーン オブ デスは存在しませんでした。代わりに、コンピューターは自発的に再起動する傾向がありました。)

テーブルの作成、作成された構造の検証、新しい列の追加、行の入力、入力後の行の内容の検証または検証など、実行されるさまざまな操作でツールが接続モードを混乱させているのではないかと思います。これが原因である場合は、一連の操作について「より純粋に」することで回避できる可能性があります。つまり、テーブルを次々と作成して完了することだけを行います。つまり、テーブルを作成してalter tableから新しい列を追加する原因となるようなことは何も行いません。 .

于 2009-11-22T08:47:10.793 に答える
0

Entity DeveloperでdotConnect for MySQLを試してください。 ツールのモデル生成プロセスにいくつかの改善を加えました。Devart Entity Model をプロジェクトに追加できます。これは ADO.NET Entity Framework モデルに似ていますが、いくつかの改善点があり、タイムアウトの問題はありません。

于 2009-11-17T15:31:34.363 に答える