5

私のアプリケーションのデータベース処理を行うためにEntity Framework 4接続を使用してSQL 2008サーバーに接続しています。Entity Framework 4でSQL 2008の次の主キーを取得するには

私はVisual Studio 2010でC#を使用しています。私の質問は、SQL自体によって増分される主キーフィールドに関するものです。データベースで次に使用されるIDを見つけることができますか? 。

最後のアイテムと+1を見つけることができないのは、テーブルにアイテム1,2,3,4,5が含まれている場合、アイテム5を削除して別のアイテムを追加すると、次のアイテムがアイテム6 5よりも(SQLでアイデンティティ仕様を使用していますが、これを使用する必要があります)。

Item.ID.GetNextIdentity()などのメソッドを見つけることができず、このような多くの同様の質問を調べましたが、役に立たないです。

すべてのヘルプは

+0

この質問は役に立ちましたか? http://stackoverflow.com/questions/2958921/entity-framework-4-how-to-find-the-primary-key –

+0

@クリス、私が探していた間、私はそれを見て、それが次のについては何も言及しませんでした質問と答えは、彼らがフィールドで使用される次の主キーではなく、主キーであるフィールドを見つけることについて話しているように思えました。 – JakeJ

+3

あなたは次のIDで何をするつもりですか?あなたがそれを得る方法を見つけたとしても、IDを取得するのはあなたが**あなた**であることを確信することはできません。提出されるフォームは、参照番号として使用することになるだろうとして使用されるIDを表示する必要があるため –

答えて

9

自動インクリメントされたIDを使用して保存する前にフォームに表示する信頼できる方法はありません。それは間違ったアーキテクチャです。

  • IDとして自動インクリメント列を使用して一意自分
  • を処理、保存をユーザーが起動するとすぐにフォームがいくつかの初期の空の状態でそれを作成していない:あなたはどちらかでなければなりません、フォームを保存する前に示したIDを持つようにしたい場合は最終フォーム確認は更新のみ行います

なぜ次IDをリクエストできないのですか?もしあなたがそれをしても、IDを受け取ったことはあなたのフォームに本当に使われると誰も言わないからです。 ID検索とフォームの永続化の間に別のプロセス/スレッド/アプリケーションがフォームを挿入すると、表示されたIDはその挿入されたフォームに割り当てられます。値が使用されず、データベースは、独自でそれを上書きすることができます -

また、あなたが自動を使用している場合は、アプリケーションのキー値を割り当てることはできません、データベース内の主キーをインクリメント。

-1

DBCC CHECKIDENT (table_name, NORESEED)

をいただければ幸い現在のID値とID列の現在の最大値を返します。

+0

私はコマンドを実行し、返された値をC#側で使用する必要があります。 Entity Framework 4を使用している私のアプリケーションでは、コマンドがEntity FrameworkではなくSQL Queryで実行されるようです。 Entity Framework 4でこれを行うことができれば、どのようにして私に言わなければならないのか分かりません。 – JakeJ

+0

これは、競合状態では動作しません。 – HLGEM

0

しかし、Ladislav Mrnkaとまったく同じですが、この種の機能が必要になる可能性があります。 バイパスの提案は、次のようになります。

 // Insert existing object in data base via EF, but PK is missing ... 
     using (var Es = new MyEntities()) 
     { 
      try 
      { 
       // Allows you to get next pk 
       var e = new Model.TableXXX(); 
       // Set pk to existing entity which has no pk 
       existingEntity.PkField = e.PkField; 
       // Save existing object and let garbage collector take care 
       // of newly created entity 
       Es.TableXXX.AddObject(existingEntity); 
       Es.SaveChanges(); 
      } 
      catch (Exception ex) 
      { 
       // implement exception 
      } 
     } 
関連する問題