Внимание! Это перевод вопроса What is the purpose of the ConcurrencyStamp column in the AspNetUsers table in the new ASP.NET MVC 6 identity?
Для чего нужно поле ConcurrencyStamp таблицы AspNetUsers в identity?
Вот структура таблицы AspNetUsers
в базе:
Такое же поле есть и в таблице AspNetRoles
:
Насколько я помню, такого поля не было в ASP.NET MVC 5 identity, появилось в MVC 6.
Вижу, что в это поле пишется GUID следующим кодом:
/// <summary>
/// A random value that must change whenever a user is persisted to the store
/// </summary>
public virtual string ConcurrencyStamp { get; set; } = Guid.NewGuid().ToString();
Но документации недостаточно для меня, чтобы понять в каких ситуациях оно используется.
Судя по названию, поле используется, чтобы предотвратить конфликт одновременного обновления записи.
Например, есть пользователь UserA в базе по имени Peter и два администратора открывают страницу редактирования пользователя UserA, чтобы обновить ему данные.
В случае без поля ConcurrencyStamp обновление первого (Admin_1) администратора было бы перезаписано обновлением второго (Admin_2).
Но поскольку у нас есть поле, то когда Admin_1/Admin_2 загружаются страницу, загружается и штамп записи. При обновлении данных записи сохраняется и штамп.
Теперь шаг 5 будет состоять в том, что система выкинет исклюение говоряющее второму администратору (Admin_2) что этот пользователь уже был обновлён, так как ConcurrencyStamp отличается от сохранённого в базе.
Примечание переводчика. В соседнем ответе напоминают, что проверку конкурентного обновления можно включить для любой таблицы, указав это через аннотации или fluent api:
Data Annotations
public class Person
{
public int PersonId { get; set; }
[ConcurrencyCheck]
public string LastName { get; set; }
public string FirstName { get; set; }
}
Fluent API
class MyContext : DbContext
{
public DbSet<Person> People { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.Property(p => p.LastName)
.IsConcurrencyToken();
}
}
public class Person
{
public int PersonId { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
}
На русском языке об этом упоминается например в статье на metanit
Нужно загрузить картинку с использованием HttpClientНо нижеприведенный код не работает
Яркий пример - модели в том же EntityFramework наNET
У меня есть небольшой участок кода на Winforms ,который я хочу перенести на WPFНужно получить картинку своего экрана
Допустим есть программа которая фоном делает определенные операции, не важно какие, допустим каждые 10 секунд собирает информацию по нагрузке...