我目前在这里挣扎。
环境: 我在改进使用 MSSQL Server 2008 R2我没有使用任何类型的 ORM。
设计/模型:(虚构)我有一个对话、一条消息和一个附件。对话有多条消息,每条消息可以有多个附件。很容易 1 .. N 连接在那里。
问题:我想在我的数据库中存储一个新的对话,包含新的对话消息和新的附件。我现在的情况是我通过保存对话自上而下。检索该 id,将该 id 设置为消息对象并存储消息(每次我进行单独的数据库调用时)。对于所有附件,同样的故事,我需要先存储消息,然后才能存储这些附件。
我研究过或想到的解决方案
目前我通过存储过程单独执行这些步骤,自上而下的保存机制。
SqlBulkCopy:真的很快。我想到了,存储所有对话,取回 ID,存储所有消息,取回他们的 ID 等等......但是问题就在这里,我需要做一个查询,比如“给我所有 20 个最后创建的记录他们的 ID”。可行,但事实上这个应用程序是多线程的,可能在那一刻其他线程会插入新行或更糟的是,被删除。
创建存储过程 一个疯狂的存储过程,我在其中发送一个数据集对象(这是更自由的头脑风暴)。
手动生成一个巨大的 sql 命令,用于存储对话、获取生成的 id 并将其用于子对象。喜欢(伪SQL):
插入对话
currentConversationId = @Identity
插入带有 conversationId = currentConversationId 的消息
目标 是否有人有更好的建议或替代方案。请避免建议我使用 ORM,因为我正在处理遗留项目。我想尽可能多地保存数据库调用。