Sütun kimliği (birincil anahtar, otomatik artış) ve İçerik (metin) içeren bir tablo Mesajlarım var.
Kullanıcı adı (birincil anahtar, metin) ve Hash sütunları olan bir tablom var.
Bir mesaj, bir Gönderen (kullanıcı) tarafından birçok alıcıya (kullanıcı) gönderilir ve bir alıcı (kullanıcı) birçok mesaj alabilir.
İki sütunlu bir Messages_Recipients tablosu oluşturdum: MessageID (Mesajlar tablosunun ID sütununa ve Alıcıya (Kullanıcılar tablosundaki kullanıcı adı sütununa atıfta bulunarak) Bu tablo, alıcılar ve mesajlar arasındaki çoktan çoğa ilişkiyi temsil eder.
Yani, sorduğum soru bu. Yeni mesajın kimliği, veri tabanında saklandıktan sonra oluşturulacaktır. Ancak bu yeni MessageID'yi almak için az önce eklediğim MessageRow'a bir referansı nasıl tutabilirim?
Tabi ki eklenen son satır için her zaman veritabanında arama yapabilirim, ancak bu, çok iş parçacıklı bir ortamda farklı bir satır döndürebilir mi?
DÜZENLEME: SQLite için anladığım kadarıyla SELECT last_insert_rowid()
. Ama bu ifadeyi ADO.Net'ten nasıl çağırırım?
Kalıcılık kodum (mesajlar ve mesajlarAlıcılar Veri Tablolarıdır):
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);
}