web-dev-qa-db-ja.com

edmxを更新して、db(.net linq-to-entities)で行われた変更を反映する

  • Edmxを作成しました。
  • 次に、データベースを少し変更し、列をNOT NULLからNULLを許可するように変更します。
  • 私はedmxに入り、右クリックして「データベースからモデルを更新」を選択します

今、私は自分のプログラムに入り、実際に更新されていません...列にヌルを入れることはできません。 edmxを適切に更新するにはどうすればよいですか?ありがとうございました。

44

EDMXを更新するには、データベースから更新モデルを選択するのが最適な方法です。概念レイヤーでは更新されない特定のプロパティがあります。

モデルビューアーツールボックスで表示して、ストアレイヤーが更新されていることを確認します。ストアが適切に更新されていれば問題ありません。データベースは同期しています。その場合は、ビジュアルデザイナーに移動し、フィールドをクリックしてプロパティに移動し、概念側のNotNullプロパティを更新します。

14
bendewey

EDMXからの更新/削除は常に機能するとは限りません。 [データベースからモデルを更新]をクリックしてもモデルが更新されない場合は、DBのビュー/テーブルを更新したときに次のようにします。

1)モデルダイアグラムからビュー/テーブルを削除する
2)EDMXをxmlビューに切り替えます(edmxファイルを右クリックし、[アプリケーションから開く]を選択します)
3)xmlエンティティ要素の検索と削除
4)EDMXビューに切り替えます
5)[データベースからモデルを更新]をクリックします

これは、EDMXに対してDBに対して行ったあらゆる種類の変更を反映する必要があります。面倒ですが、完璧に機能します。

理想的な世界では、データベースからの更新モデルがDBからEDMXへの変更を同期することを期待します。しかし、ほとんどの場合は機能しません。

81
pencilslate

私が成功したのはこれです(VB.Net)。

  1. 必要/必要に応じてデータベースを更新します
  2. EDMXモデルで[データベースから更新]を選択すると、グラフィカルモデルに新しい構造/テーブルが正しく表示されます
  3. 関連するすべてのファイルが表示されるようにプロジェクトを展開します
  4. 重要なのは、拡張子が「tt」の2つのファイルです。最初に.Contextなしでファイルを取得します。 tt拡張の前。それを右クリックして、[カスタムツールの実行]を選択します。

run custom tool

  1. .Contextを使用して.ttファイルにも同じことを行います。その名前で。すべてのコードと論理モデルクラスが更新されます。
19
Peter Klein

はい、ほとんどの場合機能しません:-/

「体系的に機能するため」の「最良の方法」は、EDMXファイルを削除して再度生成することです。ただし、App.configの接続文字列を削除することを忘れないでください(そうでない場合、VS2008 wizzardはデフォルトのエンティティ名にサフィックスを追加します)。キャッシュをクリアします。

生産性が劇的に低下するため、これらのツールが次のリリースでより良く機能することを願っています...

5
littlesteps

このIS最も簡単で簡単な方法:

  1. .edmxダイアグラムからビュー/テーブルを削除します。
  2. 今すぐデータベースからモデルを更新を使用して、テーブルを再び追加します。
4
stackPusher

1. EDMXファイルを更新した後、プロジェクトをビルドします。

2.ソリューションエクスプローラーで.ttファイルを右クリックします。

3.「カスタムツールの実行」オプションを選択します。

これにより、.ttファイルが更新されます。

ソース: こちら

4
jagad89

この答えはより良いです: https://stackoverflow.com/a/23886016/1014884

手動で編集するとエラーが発生する可能性があります。または、ウィザードなどのツールを使用すると、編集が失われます。ウィザードを使用して削除および更新する方がはるかに優れています。

2
BillDarcy

VSのXMLエディターでedmxファイルを開き、更新の試行時にエラーが発生していないかどうかを確認します。

  <!--Errors Found During Generation:
      warning 6013: The table/view 'foo.dbo.snafu' does not have a primary key   
      defined and no valid primary key could be inferred. This table/view has  
      been excluded. To use the entity you will need to review your schema,  
      add the correct keys and uncomment it.

  <EntityType Name="snafu">
    <Property Name="snafu_column" Type="smallint" />
  </EntityType>-->

上記の場合...問題のテーブルに主キーを追加すると、「データベースからモデルを更新」が機能しました。

2
w4ik

たとえば、文字列属性の最大長は更新されません!

TFSを使用する場合、ファイルを削除するのは良くありません。履歴を保持し、他の人に影響を与えたくない場合。

私にとっては、edmxファイルを完全に再作成するために使用できる小さな個別のプロジェクトを使用して動作します。それをxmlで開き、既存のファイルにコピーして貼り付け、VSが.csファイルを再作成するためにモデル内の1つの形状を移動します。出来上がり、更新されました。

1
mape1082

データベースで作成したビューがデザイナーに表示されませんでした(「データベースからモデルを更新...」を選択し、ビューの名前の横にチェックを追加した後)。 EDMXをxmlビューに切り替えるまで、エラーメッセージは表示されませんでした。

  • Edmxファイルを右クリックします
  • 「アプリケーションから開く...」を選択します
  • 「自動エディターセレクター(XML)」を選択します
  • [検索]をクリックして、ビュー名を検索します

Edmx xmlで見つけたもの:

「生成中にエラーが見つかりました:警告6013:テーブル/ビュー '(ビュー名)'にはプライマリキーが定義されておらず、有効なプライマリキーを推測できません。このテーブル/ビューは除外されました。エンティティを使用するには、スキーマを確認し、正しいキーを追加して、コメントを解除する必要があります。」

主キーを持つようにビューを変更しました。次に、edmxデザイナーを開いて「データベースからモデルを更新...」を実行すると、ビューがデザイナーでエラーなしに表示されました。

1
DeveloperDan

デザイナビューからすべてのテーブルを削除し、その後で更新するとうまくいきます

0
alexey