2017-12-08 3 views
-1

Asp.netのEntity Frameworkに問題があります。 SaveChanges()を実行せずにデータベースにオブジェクトを追加するたびにId値を取得したい。これどうやってするの?EntityフレームワークでsaveChangesを使用せずに挿入されたエンティティのIDを取得するにはどうすればよいですか?

+0

オブジェクトをSaveChanges()なしでデータベースに追加するだけです。つまり、オブジェクトはデータベースに残っています。追加することはできず、追加することもできません。変更を元に戻したい場合は、_transactions_を検討することを検討してください。 – oerkelens

+0

'SaveChanges()を実行せずにデータベースにオブジェクトを追加するたびにId値を取得したいのですがなぜこれをしたいのですか?あなたの**根底にある**問題は何ですか? – mjwills

+0

外部キーを設定するには、IDを知りたいでしょうか? IDの代わりにナビゲーションプロパティ(オブジェクト参照)を設定すると、これはほとんど必要ありません。 –

答えて

0
//MyClass has Id as property, this is set by the DB server 
var myObject = new MyClass { NotIdProp = someVal; } 

int idAfterInsert; //or string if using GUID for Id 

//transaction and then dispose DB context 
using (var db = new MyContext()) 
{ 
    //add the entity object 
    db.MyTable.Add(myObject); 

    //now myObject will have its Id set by the DB server 
    idAfterInsert = myObject.Id; 

    //that's it if you don't want to Save Changes 

} 

あなたのオブジェクトはちょうど別のSQL 列、提出または承認のようなものを追加し、それを作る保留の代わりに、この段階で保存するかどうしかし、私はこれが役立つことができ、パターン、 が表示されませんbit値(C#ではブール値)。

次に、レコードを読み込むときに、boolカラムでフィルタリングしたくないレコードを取得しないでください。

0

シーケンスを使用してIDENTITY列ではなくキー値を生成する場合は、データベースに挿入する前にキー値をフェッチできます。

EFコアはこのネイティブでSequencesをサポートしています。これをEF6で少しカスタムSQLを使用して実行できます。

関連する問題