【发布时间】:2011-01-08 18:53:32
【问题描述】:
我有一个带有列 ID(主键、自动增量)和内容(文本)的消息表。
我有一个表用户,其中包含用户名(主键、文本)和哈希列。
一条消息由一个发件人(用户)发送给多个收件人(用户),而一个收件人(用户)可以拥有多条消息。
我创建了一个包含两列的 Messages_Recipients 表:MessageID(指 Messages 表的 ID 列和 Recipient(指 Users 表中的 username 列)。该表表示收件人和消息之间的多对多关系。
所以,我的问题是这个。新消息的 ID 将在存储到数据库后创建。但是,我如何保存对刚刚添加的 MessageRow 的引用以检索这个新的 MessageID?
当然,我总是可以在数据库中搜索添加的最后一行,但在多线程环境中这可能会返回不同的行吗?
编辑:据我了解,SQLite 可以使用SELECT last_insert_rowid()。但是我如何从 ADO.Net 调用这个语句呢?
我的 Persistence 代码(messages 和 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);
}
【问题讨论】:
-
我使用 SQlite(ADO.Net 版本)
标签: database sqlite primary-key auto-increment junction-table