Блокировка в Entity Framework - PullRequest
0 голосов
/ 27 мая 2011

Я использую Entity Framework с C #.

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

Как это можно сделать?Или есть лучшее решение?

Ответы [ 2 ]

1 голос
/ 27 мая 2011

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

1 голос
/ 27 мая 2011

Один из способов сделать это - определить ограничение для БД.

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

Еще один способ сделать это - реализовать стандартный репозиторий для каждого типа объекта (например, CustomerRepository), а затем выполнить проверку в методе Create этого репозитория. Это само по себе не гарантирует уникальность, поскольку два пользователя могут одновременно создавать сущность с одинаковым именем, и проверка не будет перехватывать ее, пока вы не попытаетесь зафиксировать (т. Е. SaveChanges), но это также имеет место когда вы определяете ограничение единственности для БД ...

...