Самый эффективный метод управления подключениями к базе данных с использованием AWS лямбда-функций и AWS RDS (PostgreSQL Aurora) - PullRequest
0 голосов
/ 13 июля 2020

У меня есть приложение. 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())
        {

        }
    }

И так далее.

...