Сегодня я выпустил небольшое бета-приложение asp.net, которое позволяет внутреннему персоналу изменять информацию о продукте. Мы начали сталкиваться с проблемами, когда пользователи переписывали информацию о других продуктах... хотя каждый сотрудник редактировал совершенно другую строку (Продукт).
После некоторого поиска в google, я думаю, что знаю, что происходит, его использование с использованием статических переменных ниже - быстрый пример проблемы:
// EditProductGroup.aspx.cs
public partial class EditProductGroup : System.Web.UI.Page
{
private static int _groupId = 0;
protected void Page_Load(object sender, EventArgs e)
{
_groupId = Convert.ToInt16(Request.QueryString["GroupID"]);
// get existing ProductGroup information from database using
//_groupId to find the row and populate textboxes
}
private void saveProductGroupData()
{
// when user hits 'save changes' button, update row
//where the primary key column 'ProductGroupID' matches _groupId in the table
}
}
Таким образом, согласно моим исследованиям, статическая переменная фактически существует для приложения в целом, это означает, что если несколько пользователей используют приложение, они будут эффективно читать одно и то же "значение" для "_groupId", а в некоторых которые фактически устанавливают его на другое значение, что приводит к тому, что другой экземпляр пользователя страницы сохраняет данные в неправильной строке (ProductGroupId).
Мое намерение состояло в том, что статическая переменная изолирована от других пользователей и не должна интуитивно - каждый пользователь имеет свой собственный экземпляр страницы, таким образом, свой собственный экземпляр переменной _groupId.
К счастью, все это происходило в базе данных dev/staging, а не в live db. Я не уверен, нужно ли мне просто отказаться от ключевого слова "статические", чтобы остановить переменную, устанавливаемую/прочитанную всеми.
Любые мысли? Благодаря