У меня есть сценарий, в котором мне нужно выполнить INSERT Operation
на нескольких SQL
таблицах. Существует зависимость для вставки записей в каждую таблицу.
Я хочу выполнить сначала INSERT
в таблице сделок а затем список контактов и компаний в соответствующие таблицы, аналогично для связанных контактов и компаний INSERT
.
Все операции INSERT
должны быть частью одной SQL Transaction
, чтобы не было записи о потерянных записях в таблицах базы данных.
Я собираюсь поместить все INSERT
логики операций c в один Stored Procedure
, но мне не хватает понимания того же для обработки списка записей ( в случае контактов и компаний ) от C# до SQL.
Ниже приведены критерии зависимости Insert Table -
Основные table => Deal ()
- INSERT Deal (получить INSERTED dealid, чтобы ВСТАВИТЬ его в связанную таблицу контактов и компаний)
- INSERT список контактов в таблице контактов (получить INSERTED контактид с я NSERT его в связанной таблице контактов)
ВСТАВИТЬ список связанных контактов в таблице DealContact (dealid, contactid)
ВСТАВИТЬ список компаний в таблицу Company (получить ВСТАВИТЬ идентификатор компании, чтобы ВСТАВИТЬ его в таблицу связанных компаний)
- ВСТАВИТЬ список связанных компаний в таблицу DealCompany (dealid, companyid)
Вопрос: Как выполнить следующие операции SQL в одной транзакции SQL, чтобы убедиться, что в соответствующих таблицах нет записей потерянных записей?
- INSERT Список контактов, а затем Список связанных контактов для каждой сделки
- ВСТАВИТЬ Список компаний, а затем Список ассоциированных компаний для каждой сделки
Ниже приведен метод C#
, в котором я пытаюсь ввести эти операции Вставки -
public void ProcessDeals(List<Result> lstDeals)
{
if (_objReq == null)
_objReq = new RequestHandler();
string strBU = string.Empty;
foreach (Result deal in lstDeals)
{
#region Associated Contacts
Task<AssociatedContacts> taskAscContacts = _objReq.Get<AssociatedContacts>(_limit, deal.id);
//store response in a list of associated contacts
List<AscContact> ascContacts = taskAscContacts.Result.results;
//pull cotact information from API using contact id
List<Contact> lstContacts = new List<Contact>();
foreach (AscContact contact in ascContacts)
{
Task<Contact> taskContact = _objReq.Get<Contact>(100, contact.id);
Contact contactinfo = taskContact.Result;
//store contact in list of contacts
lstContacts.Add(contactinfo);
}
#endregion
#region Associated Companies
Task<AssociatedCompanies> taskAscCompanies = _objReq.Get<AssociatedCompanies>(_limit, deal.id);
//store response in a list of associated companies
List<AscCompany> ascCompanies = taskAscCompanies.Result.results;
//pull cotact information
List<Company> lstCompanies = new List<Company>();
foreach (AscCompany company in ascCompanies)
{
Task<Company> taskCompany = _objReq.Get<Company>(100, company.id);
//store contact in list of contacts
lstCompanies.Add(taskCompany.Result);
}
#endregion
//TODO: finally db insert operations
//Step 1 - Insert into deal
//Step 2 - Insert into contacts
//Step 3 - Insert into companies
//Step 4 - Insert into Ass Contact
//Step 5 -- Insert into Ass company
}
}
Приветствую любые предложения.