У меня есть приложение. NET Core 3.1, которое состоит из AWS API-шлюза, набора лямбда-функций и базы данных PostgreSQL RDS Aurora для чтения и записи. Это приложение использует Entity Framework Core для подключения к базе данных и выполнения запросов. Я пытаюсь понять - из двух доступных методов подключения, которые я вижу доступными, - который является правильным для повышения производительности, эффективности и наилучшего использования ресурсов в контексте AWS Lambda-контейнеров / без сервера.
Вариант 1) Поддерживать одно соединение DBContext, открытое за пределами обработчика (ов) функций моих лямбда-функций и передаваемое по всем методам, требующим указанного соединения. Например,
public class Functions
{
private readonly loyaltyContext loyaltyContext;
public Functions()
{
loyaltyContext = new loyaltyContext();
}
}
Затем в каждом обработчике:
Обратитесь к нему:
var testEfCore = (from c in loyaltyContext.ContactInformation
select c.ContactInternalId).Take(1);
Передайте его другим методам:
var duplicateError = await BusinessRules.DuplicateCustomerCheck(customer, loyaltyContext);
Option 2)
Создавайте, используйте и удаляйте DbContext в каждой требуемой точке в обработчике, а также в методах и функциях, которые он вызывает, например,
public static bool IsCardExist(string cardNumber, string cardState)
{
using (var loyalty = new loyaltyContext())
{
var existingCard = (from c in loyalty.ExternalCards
where c.CardNumber == cardNumber
&& c.CardStatus == cardState
select c.CardNumber).Any();
return existingCard;
}
}
public static void SomeOtherFunctionCalledByHandler ()
{
using (var loyalty = new loyaltyContext())
{
}
}
И так далее.