Tôi có một bảng Tin nhắn với các cột ID (khóa chính, tự động gia tăng) và Nội dung (văn bản).
Tôi có một bảng Người dùng với tên người dùng cột (khóa chính, văn bản) và Băm.
Một tin nhắn được gửi bởi một Người gửi (người dùng) đến nhiều người nhận (người dùng) và một người nhận (người dùng) có thể có nhiều tin nhắn.
Tôi đã tạo một bảng Messages_Recipthers với hai cột: MessageID (tham chiếu đến cột ID của bảng Tin nhắn và Người nhận (tham chiếu đến cột tên người dùng trong bảng Người dùng). Bảng này đại diện cho mối quan hệ nhiều đến nhiều giữa người nhận và thư.
Vì vậy, câu hỏi tôi có là này. ID của một tin nhắn mới sẽ được tạo sau khi nó đã được lưu trữ trong cơ sở dữ liệu. Nhưng làm cách nào tôi có thể giữ một tham chiếu đến MessageRow mà tôi vừa thêm để truy xuất MessageID mới này?
Tất nhiên, tôi luôn có thể tìm kiếm cơ sở dữ liệu cho hàng cuối cùng được thêm vào, nhưng điều đó có thể trả về một hàng khác trong môi trường đa luồng?
CHỈNH SỬA: Theo tôi hiểu về SQLite, bạn có thể sử dụng SELECT last_insert_rowid()
. Nhưng làm cách nào để gọi câu lệnh này từ ADO.Net?
Mã Persistence của tôi (tin nhắn và tin nhắn Người nhận là DataTable):
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);
}