Мое рабочее место не использует столбцы идентификаторов или идентификаторы GUID для первичных ключей. Вместо этого мы извлекаем «следующие идентификаторы» из таблицы по мере необходимости и увеличиваем значение для каждой вставки.
К сожалению, для меня LINQ-TO-SQL оптимизирован с использованием столбцов идентификаторов. Поэтому мне нужно запрашивать и обновлять таблицу «NextId» всякий раз, когда я выполняю вставку. Для простоты я делаю это при создании нового объекта:
var db = new DataContext( "...connection string..." );
var car = Car
{
Id = GetNextId<Car>( db ),
TopSpeed = 88.0
};
db.InsertOnSubmit( car );
db.SubmitChanges();
Метод GetNextId выглядит примерно так:
* +1007 *
Поскольку все операции между созданием контекста данных и вызовом SubmitChanges являются частью одной транзакции, нужно ли создавать отдельный контекст данных для получения следующих идентификаторов? Каждый раз, когда мне нужен идентификатор, мне нужно запрашивать и обновлять таблицу внутри транзакции, чтобы несколько приложений не могли получить одно и то же значение. Вызов SubmitChanges () в методе GetNextId () отправит все предыдущие операции, что я не хочу делать.
Является ли отдельный контекст данных единственным способом или есть что-то лучшее, что я мог бы попробовать?