Mam tabelę Wiadomości z identyfikatorem kolumn (klucz podstawowy, autoincrement) i Treść (tekst).
Mam tabelę Użytkownicy z kolumnami nazwa użytkownika (klucz podstawowy, tekst) i hash.
Wiadomość jest wysyłana przez jednego Nadawcę (użytkownika) do wielu odbiorców (użytkownika), a odbiorca (użytkownik) może mieć wiele wiadomości.
Utworzyłem tabelę Messages_Recipients z dwiema kolumnami: MessageID (odnosząca się do kolumny ID w tabeli Messages i Recipient (odnosząca się do kolumny nazwa użytkownika w tabeli Users).
Więc mam takie pytanie. Identyfikator nowej wiadomości zostanie utworzony po jej zapisaniu w bazie danych. Ale jak mogę przechowywać odniesienie do MessageRow, który właśnie dodałem, aby pobrać ten nowy MessageID?
Zawsze mogę oczywiście przeszukać bazę danych pod kątem ostatniego dodanego wiersza, ale to może zwrócić inny wiersz w środowisku wielowątkowym?
EDYCJA: Jak rozumiem dla SQLite, możesz użyć SELECT last_insert_rowid()
. Ale jak nazwać to oświadczenie z ADO.Net?
Mój kod trwałości (wiadomości i wiadomościRecipients to 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);
}