ID(主キー、自動インクリメント)列とコンテンツ(テキスト)列を持つメッセージテーブルがあります。
ユーザー名(主キー、テキスト)とハッシュの列を持つユーザーテーブルがあります。
メッセージは1人の送信者(ユーザー)から多くの受信者(ユーザー)に送信され、受信者(ユーザー)は多くのメッセージを持つことができます。
MessageID(MessagesテーブルのID列を参照)とRecipient(Usersテーブルのusername列を参照)の2つの列を持つMessages_Recipientsテーブルを作成しました。このテーブルは、受信者とメッセージの間の多対多の関係を表します。
だから、私が持っている質問はこれです。新しいメッセージのIDは、データベースに保存された後に作成されます。しかし、この新しいMessageIDを取得するために、追加したばかりのMessageRowへの参照を保持するにはどうすればよいですか?
もちろん、最後に追加された行をデータベースでいつでも検索できますが、マルチスレッド環境では別の行が返される可能性がありますか?
編集:私はSQLiteについて理解しているので、を使用できますSELECT last_insert_rowid()
。しかし、ADO.Netからこのステートメントを呼び出すにはどうすればよいですか?
私の永続性コード(メッセージとmessagesRecipientsはDataTablesです):
public void Persist(Message message)
{
pm_databaseDataSet.MessagesRow messagerow;
messagerow=messages.AddMessagesRow(message.Sender,
message.TimeSent.ToFileTime(),
message.Content,
message.TimeCreated.ToFileTime());
UpdateMessages();
var x = messagerow;//I hoped the messagerow would hold a
//reference to the new row in the Messages table, but it does not.
foreach (var recipient in message.Recipients)
{
var row = messagesRecipients.NewMessages_RecipientsRow();
row.Recipient = recipient;
//row.MessageID= How do I find this??
messagesRecipients.AddMessages_RecipientsRow(row);
UpdateMessagesRecipients();//method not shown
}
}
private void UpdateMessages()
{
messagesAdapter.Update(messages);
messagesAdapter.Fill(messages);
}