열 ID (기본 키, 자동 증가) 및 콘텐츠 (텍스트)가있는 테이블 메시지가 있습니다.
사용자 이름 (기본 키, 텍스트) 및 해시 열이있는 테이블 사용자가 있습니다.
한 발신자 (사용자)가 여러 수신자 (사용자)에게 메시지를 보내고 수신자 (사용자)는 여러 메시지를 가질 수 있습니다.
MessageID (MessageID (Messages 테이블의 ID 열 참조) 및 Recipient (Users 테이블의 사용자 이름 열 참조)) 열이있는 Messages_Recipients 테이블을 생성했습니다.이 테이블은 수신자와 메시지 간의 다 대다 관계를 나타냅니다.
그래서 제가 가진 질문은 이것입니다. 새 메시지의 ID는 데이터베이스에 저장된 후 생성됩니다. 그러나이 새 MessageID를 검색하기 위해 방금 추가 한 MessageRow에 대한 참조를 어떻게 보유 할 수 있습니까?
물론 마지막으로 추가 된 행을 데이터베이스에서 항상 검색 할 수 있지만 다중 스레드 환경에서 다른 행을 반환 할 수 있습니까?
편집 : SQLite에 대해 이해하면 SELECT last_insert_rowid()
. 그러나 ADO.Net에서이 문을 어떻게 호출합니까?
내 지속성 코드 (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);
}