2011-04-11 12 views
5

通常のEF呼び出しを使用してデータベースに追加されるテーブル "JobOrder"があります。私のデータベースで
、私はそれEFモデルのデフォルトは、それを0
を設定する必要はありませんので、私は主キー&自動インクリメント値としてJOB_IDを持っているしかし、私は挿入されたJOB_IDを必要としています私はSaveChanges()を呼び出した後にデータベースに。
Iは、(Refreshを使用してみました)が、それが機能しなかった、新たに挿入されたオブジェクトのJOB_IDがまだ0EFはデータベースに最近追加されたオブジェクトの主キーを更新しません

using (ObjContext context = new ObjContext()) 
{ 
    context.AddToJobOrder(order); 
    context.SaveChanges(); 
    context.Refresh(RefreshMode.StoreWins, order);    //TRIED THIS 
    context.Refresh(RefreshMode.StoreWins, context.JobOrder); //TRIED THIS TOO 
} 

た上述したように私は両方の呼び出しを試みたが、それでも私は0にJOB_IDを有することになりました。
ご協力いただければ幸いです。

+0

デザイナーからの通常の方法でデータベースからモデルを生成し、手動で調整していませんか? SaveChanges()はデータをデータベースに書き込みますか? – 0x49D1

+0

はい、ウィザードを使用して生成しました。 XMLを変更しませんでした。はい、SaveChanges()はデータをデータベースに書き込みます。 – Rahul

答えて

1

通常の状況では、Refreshメソッドは必要ありません。 context.SaveChanges()の後に新しく挿入された注文には、適切なorder.Job_idが必要です。確かにあなたはMSSQLのデータベースを持っている場合..他のケースでは、プロバイダーでいくつかの実装されていないものがある可能性があります今のところほぼすべての主要なDBベンダーは、一般的なEFの機能をサポートしてDBプロバイダの少なくともベータ版を持っています。
PSネット上やスタックオーバーフローに関しても同様の質問がたくさんあります。例えば、thisを参照してください。

1

コンテキストにオブジェクトを追加すると、SaveChanges()はIDフィールドを正しく入力する必要があります。

これを試して、ブレークポイントを設定すると、主キーIDが正しく設定されていることがわかります。

using (ObjContext context = new ObjContext()) 
{ 
    context.AddToJobOrder(order); 
    context.SaveChanges(); 

    //Breakpoint here, and see that Job_id has been populated. 
    Debug.WriteLine(order.Jod_id); 
} 

のみ.SaveChangesそれがデータベースに行くと、次の数値を見つける必要があるため、主キーのgetセットを行います。

0

StoreGeneratedPatternプロパティがIDに設定されていることを確認してください。 CSDLとSSDL。デザイナーはCSDLプロパティのみを表示するので、XMLエディタで開いてSSDLを表示したり編集したりする必要があるかもしれません(たとえば、my add-inモデル比較ツール for EF4)。DB/SSDL/CSDLを同期します。

+1

はいクリス、そうです。私はデータベースを更新しましたが、モデルは更新されませんでした。 – Rahul

関連する問題