0

現在、Web サービスを設計しているだけなので、実際のコードはありませんが、これはデータベースとアプリケーションの両方の設計に影響を与える可能性があります。

自動インクリメントであるbigint型の主キーを持つデータベーステーブル(SQL Server内)を用意する予定です。ここで、ADO.NET では、新しいレコードをテーブルに追加するときにこのフィールドを設定しないと想定しています。私が知る必要があるのは、追加されたばかりの ID をどうやって知るかということです。もちろん、そのフィールドで select MAX を実行することもできますが、ADO.NET は実際に新しい ID の値を返し、オーバーヘッドを節約できますか?

たとえば、次のようなコードがあるとします。

using (MyEntities context = new MyEntities())
{
    context.Table1.AddObject(new Table1()
    {
        StringColumn1 = "some value",
        StringColumn2 = "some value"
    });

    context.SaveChanges();
}

テーブル 1 に ID と呼ばれる自動インクリメント PK があった場合、追加されたばかりの値をどのように知ることができますか?

4

2 に答える 2

2

Entity Framework を使用すると、これはすべて自動的に行われます。

using (MyEntities context = new MyEntities())
{
    var myNewObject = new Table1()
    {
        StringColumn1 = "some value",
        StringColumn2 = "some value"
    });

    context.Table1.AddObject(myNewObject);

    context.SaveChanges();

    // get the new ID
    var newID = myNewObject.ID;
}

Entity Framework に保存すると、「自動インクリメント」ID列が自動的に更新され、呼び出しの後にそれを読み取るだけ.SaveChanges()です ...

于 2012-07-13T10:33:20.920 に答える
1

正しく覚えていれば、EFでIDを取得できるため、この方法で達成しました

using (MyEntities context = new MyEntities())
{
var table1 =  new Table1()
{
      StringColumn1 = "some value",
      StringColumn2 = "some value"
};

    context.Table1.AddObject(table1);

    context.SaveChanges();

int id = table1.Id;
}
于 2012-07-13T10:34:56.070 に答える