2011-02-08 3 views
1

私は、自動生成されたID列を持つデータベーステーブルにエンティティをマップしました。
新しいエンティティを作成してSaveChanges()を呼び出した後、EFは挿入クエリを実行し、新しく挿入されたレコードの新しいID値も取得します。エンティティフレームワーク(3.5)を挿入すると、挿入後にID値の選択をスキップする方法はありますか?

時々、私は新しい値が何であるか気にしません(たとえば、新しいログレコードを挿入し、追加されたID値を気にしません)。
EFにこの値を問い合せない方法はありますか?

おかげで、
イタイ

答えて

3

EDMXファイルは、属性StoreGeneratedPattern="Identity"で、このような自動生成されたプロパティが定義されます。 EDMXを直接変更して、この属性を両方のSSDL(およびおそらく同様にCSDLの部分)から削除する必要があります。デザイナーから値を変更すると、SQL生成の責任を負わないCSDL部分だけが変更されます。問題は、IDがデータベースで定義されているため、データベースからの各更新後にSSDLにこの属性が再度含まれることです。

編集:

前の提案は理論でした。実際には、EDMXの列をアイデンティティとして定義しないと、実際の値がデータベースに送信されるため、機能しないと思います。インデント挿入を設定せずにID列に値を挿入しようとするため、データベースで例外が発生します。

+0

+1また、これは良い考えではないかもしれません。エンティティメモリモデルがDBモデルと一貫していないことを意味します(エンティティが挿入されるとすぐに破棄することを約束しても) – StuartLC

+0

ありがとうございますが、あなたが言ったように、それはおそらく挿入中に例外をスローします。これまでのところ、覚えている唯一の解決策は、ストアドプロシージャまたはカスタムSQLコマンドを使用することです。 –

+0

@Itay:それはなぜあなたにとって大きな問題になるのですか? ID値はInsertコマンドと同じコマンドバッチで選択されるため、ここでのパフォーマンスの低下は小さくなります。 EFの機能が非常に悪いです(コマンドのバッチ処理の不足など)。 –

関連する問題