2011-06-24 46 views
32

SQLデータベースに行を挿入するためにEntity Frameworkを使用しています。私がストアドプロシージャを使用する場合、私は挿入したレコードのプライマリキーを返すことができます。挿入されたレコードの主キーIDを取得するEntity Framework 4

Entity Frameworkを使用して最後に挿入した最後のレコードのPKを返すことはできますか?

答えて

36

エンティティを挿入した後は、データベースの主キーにマップされているプロパティが新しいPK値を持つように更新されているはずです。

+2

Addで起こることはありますか?使用可能なIDを取得する前に、まずコンテキストへの変更を保存する必要がありますか? –

+4

変更をデータベースにコミットする必要があります。データベースにヒットするまで、PK値は生成されず、コンテキストに追加するだけです。 –

+0

これは、SCOPE_IDENTITYのバグのために必ずしも完全に信頼できるとは限りません。 – DFTR

26

もちろん、これを行うことができます。例:

int id = 0; 

using (PC2Entities objectContext = new PC2Entities()) 
{ 
    objectContext.ClientContacts.AddObject(clientContact); 
    objectContext.SaveChanges(); 
    id = clientContact.Id; 

    transaction.Complete(); 
} 

idはPKです。

0

まだ挿入してもIDを取得できない場合は、この属性を主キーのプロパティに追加してください。私はこれをしなければならなかった

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public string ID { get; set; } 

は、私はOracleとエンティティフレームワークを使用していても、その程度満足していないので、なぜ、かもしれ知りません。

関連する問題