2012-04-13 14 views
2

Update Model From Databaseを実行しているときに、単一テーブルのSSDLを更新しないようにEFに指示する方法はありますか?特定のテーブルのデータベースからEF更新モデルを拒否する方法は?

少し詳細:
Dbファーストアプローチ(edmxとUpdate Model From Database)のEF 4.3を使用しています。

何らかの理由でSQL Serverにプライマリキーが設定されていないが、プライマリキーとして使用するようにEFに指示できる自動インクリメントIdentity列を持つテーブルがあります。

EFはテーブル自体にプライマリキーが見つからないため、そのテーブルのSSDLにDefiningQueryを生成します(更新および挿入を防止します)。

私は簡単にそのDefiningQueryを削除して(そして他のEntitySet属性を変更することができます)、すべて正常に動作します。

私はもう一度Update Model From Databaseを実行するときを除いて、DefiningQueryが再び戻ることを除いて。

EFにその単一テーブルのSSDLを更新しないように指示する方法はありますか?

+0

まあ、最も簡単な**解決方法は、そのテーブルにそのIdentity列の主キーを与えることです。** ANY ** "実"テーブルには主キーが必要です。 –

+0

これはちょっと難しいです:)実際のテーブルにはキーがあります(キーを念頭に置いてください)。これは4列のコンポジットで、そのうちのいくつかはnullableです(EFはキー内でnullを好まない)。そこで、使い易い代理キーを追加しました。しかし、dbもERPサービスによって生成され、消費され、そのIDフィールドについてはわからないので、それを主キーにすることはできません。サロゲートキーのアイデアはうまくいき、ssdl-regenerationを除いていくつかのことを単純化しました.. – Shaddix

+0

** WHY **サロゲートカラムをプライマリキーにできませんか?プライマリキーの目的は、各行を一意に識別することです。サロゲートIDは完全にうまく実行されます。 –

答えて

1

データベースからモデルを更新しているときに、単一テーブルのSSDLを更新しないようEFに指示する方法はありますか?

デフォルトのデザイナーはVisual Studioで提供されていません。 EDMXファイルのSSDL部分を変更したら、手動でそれを維持するか、データベースからの更新を実行するたびに修正するスクリプトを作成する必要があります。

また、より強力なデザイナーまたはextension to Visual Studioを購入すると、選択的な更新が可能です。

とにかく何をしようとしているのは避けてください。データベースがERPによって所有されている場合は、ERPプログラミングAPI(実際のERPにはいくつかあります)を介してのみアクセスする必要があります。そうしないと、ERPの機能を破壊したり、ERPデータを破損したり、パフォーマンスの問題を引き起こしたり、デッドロックを引き起こすことさえあります。

+0

私は知っています、私はapiを使用していることを認識しています:)また、.ttテンプレートに統合して手動でssdlを修正することも考えました。ご回答有難うございます! – Shaddix

+0

FWIW、拡張機能は長いオプションではない可能性があります。**重要な注意:この製品は2013年12月31日に廃止されます。既存のライセンスは引き続き有効で、Visual Studio 2012、2010、および2008でも引き続き使用できます。ただし、この日以降は新しいライセンスは発行されません。** – R0MANARMY

関連する問題