0

LINQ to SQL を使用して SQL Server に接続する ASP.NET MVC サイトを構築しています。ここには、ID を表す IDENTITY bigint 主キー列を持つテーブルがあります。

私のコード メソッドの 1 つで、そのテーブルのオブジェクトを作成してその ID を取得する必要があります。この ID は、別のテーブル (FK と PK の関係) に基づいて別のオブジェクトに配置されます。

IDENTITY 列の値はどの時点で生成され、コードからどのように取得できますか?

次への正しいアプローチは次のとおりです。

  1. IDENTITY 列を持つオブジェクトを作成します
  2. InsertOnSubmit() および SubmitChanges() を実行して、オブジェクトをデータベース テーブルに送信します。
  3. オブジェクトの ID プロパティの値を取得する
4

1 に答える 1

1

ID は SubmitChanges を呼び出したときにのみ生成されるため、リストされているアプローチは実行可能なオプションです。

ただし、できることは、他のオブジェクトの ID ではなく FK オブジェクトを設定することであり、LINQ to SQL がそれを解決します。

EG: TableA.TableBID が TableB.TableBID の FK である場合、次のことを参照しています。

TableB b = new TableB();
context.TableB.InsertOnSubmit(b);
context.SubmitChanges();
TableA a = new TableA();
a.TableBID = b.TableBID;
context.TableA.InsertOnSubmit(a);
context.SubmitChanges();

ただし、次のように FK のオブジェクトを設定することで、1 回の送信でそれを行うことができます。

TableB b = new TableB();
context.TableB.InsertOnSubmit(b);
TableA a = new TableA();
a.TableB = b;
context.TableA.InsertOnSubmit(a);
context.SubmitChanges();

この例では、コード的にはそれほど短くはありませんが、通常は構造的に良いことである、コミットする場所を 1 つだけ許可します。

于 2010-06-17T04:14:06.390 に答える