2

いくつかの方法で、SQLサーバーテーブルに挿入された最後の行を取得するためのlinqクエリを試しました。

私はこのようなものが必要です

var lastId = from u in context.sistema_Documentos where u.id == max select u;

不可能だと言う人もいれば、安全ではない、またはパフォーマンスに大幅な影響を与えると言う人もいます。このクエリを実行するにはどうすればよいですか。

追伸..これは良いアプローチでしょうか?

var lastId = from u in context.sistema_Documentos orderby u.id descending select u.id;
4

2 に答える 2

9

探している ID 値は、SubmitChanges()メソッドを実行した後に利用できます。次のように読むことができます。

context.InsertOnSubmit(entityToInsert);
context.SubmitChanges();
Var lastinsertedId = entityToInsert.Id;
于 2012-12-14T16:22:41.690 に答える
2

パフォーマンスの問題はなく、単純で単純なクエリ:

var lastId = (from u context.sistema_Documentos
             Select u.id).Max();

ただし、1つの更新で何らかのマスターと詳細の関係を設定するシナリオの場合、これは適切なアプローチではない可能性があります。その場合は、エンティティ自体を使用する必要があります。そして、ジョエルが言及しているように、それは常に最後を返すわけではありません...

例えば。

context.InsertOnSumbit(masterEntity)
detail.masterEntity = masterEntity
context.InsertOnSubmit(detail)
SubmitChanges()...

これにより、PK/FKの割り当てが適切に1つのトランザクション内で処理されます。

于 2012-12-14T16:20:27.130 に答える