Entity Framework ObjectContext для повторного использования

Использовать getElementById:

document.getElementById ('frmProduct').submit ()
13
задан verror 28 April 2010 в 06:04
поделиться

4 ответа

Определенно для каждого запроса. Это легкий объект, поэтому на его создание каждый раз, когда он вам нужен, не требуется больших затрат.

Кроме того, чем дольше вы поддерживаете ObjectContext активным, тем больше кэшированных объектов он будет содержать при выполнении запросов к нему. Это может вызвать проблемы с памятью. Поэтому использование ObjectContext в качестве синглтона - особенно плохая идея. По мере использования вашего приложения вы загружаете все больше и больше сущностей в одноэлементный ObjectContext, пока, наконец, у вас не будет вся база данных в памяти (если вы не отсоединяете сущности, когда они больше не нужны).

И еще есть проблема ремонтопригодности. Однажды вы пытаетесь отследить ошибку, но не можете понять, куда были загружены данные, которые ее вызвали.

14
ответ дан 1 December 2019 в 20:11
поделиться

Я думаю, что наиболее распространенный способ - использовать его по запросу. Создайте его в начале, сделайте то, что вам нужно (в большинстве случаев это операции, требующие общего ObjectContext), удалите в конце. Большинство платформ DI поддерживают этот сценарий, но вы также можете использовать HttpModule , чтобы создать контекст и поместить его в HttpContext.Current.Items . Это простой пример:

public class MyEntitiesHttpModule : IHttpModule
{
    public void Init(HttpApplication application)
    {
        application.BeginRequest += ApplicationBeginRequest;
        application.EndRequest += ApplicationEndRequest;
    }

    private void ApplicationEndRequest(object sender, EventArgs e)
    {
        if (HttpContext.Current.Items[@"MyEntities"] != null)
            ((MyEntities)HttpContext.Current.Items[@"MyEntities"]).Dispose();
    }

    private static void ApplicationBeginRequest(Object source, EventArgs e)
    {
        var context = new MyEntities();
        HttpContext.Current.Items[@"MyEntities"] = context;
    }
}
15
ответ дан 1 December 2019 в 20:11
поделиться

Как говорит Люк, этот вопрос много раз задавали на SO.

Для веб-приложения лучше всего подходит цикл запросов. Синглтон - определенно плохая идея.

По запросу работает хорошо, потому что на одной веб-странице есть Пользователь, возможно, несколько проектов, принадлежащих этому пользователю, может быть, несколько сообщений для этого пользователя. Вам нужен тот же ObjectContext, чтобы вы могли перейти в User.Messages для их получения, возможно, пометить некоторые сообщения как прочитанные, возможно, добавить Project, а затем либо зафиксировать, либо отказаться от всего графа объекта по завершении цикла страницы.

1
ответ дан 1 December 2019 в 20:11
поделиться

Не используйте синглтон ... каждый, кто использует ваше приложение, поделится им, и всякие сумасшедшие вещи будут происходить, когда контекст этого объекта отслеживает сущности.

Я бы добавил его как закрытый член

1
ответ дан 1 December 2019 в 20:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: