最佳答案
我有一个包含列 ID (主键,自动增量)和 Content (文本)的表 Messages。
我有一个包含列用户名(主键、文本)和 Hash 的用户表。
一个消息由一个发件人(用户)发送给多个收件人(用户) ,而一个收件人(用户)可以有多个消息。
我创建了一个 Messages _ Recipients 表,其中有两列: MessageID (引用 Messages 表的 ID 列和 Recipient (引用 Users 表中的 username 列)。此表表示收件人和邮件之间的多对多关系。
我的问题是。新邮件的 ID 将在其存储在数据库中之后创建。但是如何保存刚刚添加的 MessageRow 的引用以检索这个新的 MessageID 呢?当然,< br/> 我总是可以在数据库中搜索添加的最后一行,但是这可能会在多线程环境中返回不同的行吗?译注:
编辑: 据我所知,对于 SQLite,您可以使用 SELECT last_insert_rowid()
。但是如何从 ADO.Net 调用这个语句呢?
我的持久性代码(消息和 message 收件人是 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);
}