Как заблокировать действие контроллера ASP.NET MVC в зависимости от переменной? [Дубликат]

Нет API, который извлекает только одно поле из документа. Все документы всегда извлекаются, когда вы используете getDocument () . Это означает, что также нет способа использовать правила безопасности для защиты одного поля в документе по-другому, чем другие.

Если вы пытаетесь свести к минимуму количество данных, которые попадают на провод, вы можете поместите это одиночное поле в свой собственный документ в подколлекцию основного документа, и вы можете запросить один документ отдельно.

См. также этот поток обсуждения .

6
задан Dendei 26 September 2013 в 08:00
поделиться

2 ответа

Вы можете использовать ConcurrentDictionary для сопоставления каждого идентификатора объекту, который вы можете заблокировать:

public class Foo
{
    private ConcurrentDictionary<long, object> dictionary = 
        new ConcurrentDictionary<long, object>();

    private void EditCheck(long checkid)
    {
        var key = dictionary.GetOrAdd(checkid, new object());
        lock (key)
        {
            //Do stuff with key
        }
    }
}
13
ответ дан Servy 24 August 2018 в 06:18
поделиться

Как вы хотите улучшить производительность, вы должны сделать блокировку в последний момент, насколько это возможно. Когда вы используете базу данных, вы можете использовать блокировку БД. У вас есть два варианта:

  1. Используйте Select for update, посмотрите Правильный способ выбора и обновления SQL
  2. Использовать оптимистичную блокировку, которая лучше всего имхо подход к этому, http://en.wikipedia.org/wiki/Optimistic_concurrency_control или http://docs.jboss.org/hibernate/orm/4.0/devguide/en-US /html/ch05.html

Обратите внимание, что оба подхода позволяют вам использовать ресурсы БД более, чем программные. Это лучше, чем предлагаемый словарь, почему?

После дублирования данных в БД дублируются в словаре времени исполнения, вы вынуждены их синхронизировать, поэтому, если кто-то обновляет базу данных и добавляет новые id вам нужно немедленно обновить словарь.

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

0
ответ дан Community 24 August 2018 в 06:18
поделиться
Другие вопросы по тегам:

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