0

私は3つのテーブルを持っています。タスクの作成とリソースのアップロードを同時に行います。データは2つのテーブルに保存されます。1つはタスク情報用で、もう1つはリソース用です。

2つのテーブルの主キーを3番目のテーブルに挿入しようとしています。最初のテーブルが呼び出され、主キーとして、、Taskおよびがあります。2つ目は-で、主キーとしてとを持っています。どちらのIDにも自動インクリメントオプションがあるため、テーブルにデータを入力するときにIDを入力しません。task_idtask_nametask_descriptionResourceresource_idresource_name

と呼ばれる3番目のテーブルに挿入task_idしたいと思います。主キーがあります(これも自動インクリメントオプション付き)。resource_idTask_resourcetask_resource_id

IDがわからないので、どうすればよいのでしょうか。

これは、1つのタスクに多くのリソースを含めることができ、3番目のテーブルでそれらを組み合わせて検索できるためです(たとえば、のようなものSELECT data from the other 2 tables WHERE task_id=1)。

私はasp.netWebアプリケーションとmssqlデータベースを持っています。私はc#を使用しています。

考えられる解決策は、 inを参照するテーブルに呼び出さtask_idれた列を挿入することである可能性があることを知っています。Resourcetask_idTask

しかし、もう一度、私はそれを知らないので、そのIDを挿入する方法は?

4

2 に答える 2

2

最初のテーブルで挿入を実行してから、クエリからscope_identity()を返します。次に、2番目のテーブルに挿入すると、IDがありますか?または、LINQを使用している場合

//create the object
Task task = new Task{

task_name = src.taskName,
task_description = src.taskDescription

}

context.Tasks.InsertOnSubmit(task);
context.SubmitChanges();

//do second insert
Int32 taskIDFromLastInsert = task.task_id;

Resource res = new Resource{

resource_name = scr.ResourceName,
task_id = taskIDFromLastInsert // optional if you want to change your structure

}

context.Resources.InsertOnSubmit(res); context.SubmitChanges();

Int32 resourceIDFromLastInsert = resource_id;

本当に3番目のテーブルに挿入したい場合は、両方のIDがあります。

それはあなたのデータを参照するためのクリーンな方法です

挿入後、データに対してクエリを実行します。

于 2012-12-04T11:34:53.110 に答える
1

あなたは使用する必要があります

SET IDENTITY_INSERT

于 2012-12-04T11:30:19.133 に答える