2012-10-24 6 views
9

Visual Studio 2010 EF 4では、データベーステーブルに新しい列を追加し、次に.edmxの[データベースからモデルを更新]をクリックし、すべてが世界で良かった。VS 2012 - EF 5.0 - データベースからのモデルの更新 - テーブルの変更を受け取りません

Visual Studio 2012 EF 5では、テーブルを変更してから[モデルからデータベースを更新]をクリックし、個々のテーブルの変更をもう受け取りません。

私は何かが欠けていますか...これはVS2012の新しい「機能」ですか?

更新 私は.EDMXファイルに反映させるために追加された列を持つテーブルを得ることができる唯一の方法は、テーブルその後、「データベースからのモデルの更新」を削除することであり、それが追加された列をピックアップします。しかし、追加されたテーブルを左にずらすと、元に戻す必要があります。いいえ大物ちょうど迷惑。

+2

これは、2010年と2008年であっても、常に変わってきました。特定の種類の変更は、モデルに伝播されていません。おそらく、これはそれらのインスタンスの1つですか? –

+1

私はそれを聞いていますが、少なくともそれは2010年のテーブルを更新するために働いて、edmxはそれを拾うでしょう。これはLINQの日に戻って、アイテムを削除してから、それを元に戻す必要があります... ugh – c0d3p03t

+0

私が言ったように、それは必ずしもそうではありませんでした。そして、頻繁に手動でオブジェクトを更新するか、削除して再追加する必要がありました。 –

答えて

2

EFモデルと、データベースに下線が引かれる方法との間には違いがあります。 「データベースからモデルを更新する」ときに、エンティティ/テーブルがすでにデータモデルにインポートされている場合は、エンティティをリフレッシュします。このプロセスでは、データベーススキーマが既存のデータモデルに自動的にマッピングされることはありませんが、EFモデルのエンティティにプロパティを追加し、そのプロパティをデータベース列にマップすることができます(EFが自動的に行います削除と更新は正常に行われます)。

エンティティを最初に削除すると、update EFは以前にテーブル/エンティティがインポートされていないことを認識しているので、すべてのデータベース列が自動的にマップされます。

要約すると、エンティティを削除する必要はありませんが、単純なエンティティの場合は簡単に削除できます。

+0

答えはありません私は望んでいたが、それは助けになる、ありがとう! – c0d3p03t

+0

私は知っている、それは控えめに言っても迷惑です。私はあなたがそれを追加したときとリフレッシュしたときの間にエンティティに追加の変更を加えたかもしれないが、ハッシュチェックの比較ではないはずだからだと思いますか?私はADO.NETチームには理由があると確信しています。 –

8

はい、これはVS2012でも引き続き使用できます。デフォルトのコード生成を使用していますか、またはTTファイルがありますか?それがEDMXに追加されている可能性がありますが、クラスファイルが更新されていない可能性があります。

ソリューションエクスプローラでEDMXファイルまたは関連するTTファイルを右クリックし、[カスタムツールの実行]を選択して再生成されていることを確認してください。

+0

実際にクラスを再構築し、.edmxファイルへの変更を取得します。 しかし、テーブルを変更しても、まだその変更が反映されていません。ここをクリックしてください:[screenshot](http://screencast.com/t/fahh6WqNYZ) – c0d3p03t

+0

新しい列のあるテーブルは[追加]タブの下に表示されません。 「更新」タブに表示されます。あなたのテーブルはそのタブのリフレッシュの下にリストされていますか?既存のテーブルに新しい列を追加することは、2010年と2012年には*常に*私のために働いています。しかし、WAAAYを片方に置くことは新しい2012年の機能です:) –

+0

+1 "Run Custom Tool" – ADOConnection

0

私は同様の問題を抱えていましたが、モデルからテーブルを削除してから、「データベースからモデルを更新」を選択しました。これは再び機能しませんでした。テーブルに追加した新しい列にはアクセスできませんでした。

しかし、モデルのデザイナファイルをソース管理(Vault Professional)から手動でチェックアウトしてからモデルからテーブルを削除し、データベースからモデルを再度更新すると、うまくいきました。だから、おそらくVSはこの特定のインスタンスでモデルのデザイナーファイルをチェックアウトすることを知らない。

0

エンティティの1つを削除し、データベースから再度更新したいと思うので、これが起こります。モデルはこのエンティティをキャッシュしています。なぜなら、テーブルを更新する選択肢がないからです。右クリックする必要がありますモデルページとモデルブラウザーオプションを選択します。右側にモデルブラウザーがあります。エンティティタイプfolder.nowから更新するエンティティを自由に選択してください。

関連する問題