Я пытаюсь найти правильный способ атомарного увеличения счетчика в одной таблице и использовать это увеличенное значение в качестве псевдо-идентификатора только для отображения записи в другой.
У меня есть таблица компаний и таблица вакансий. Я хочу, чтобы у каждой компании был свой набор job_numbers. У меня есть автоинкремент job_id, но эти цифры являются общими для всех компаний. то есть: номера должностей обычно должны увеличиваться без пробелов для каждой компании.
т.е.:
- компаний (company_id, next_job_number)
- рабочих мест (company_id, job_id, job_number)
В настоящее время я делаю это (как метод в классе частичной работы):
public void SaveJob()
{
using (var scope = new System.Transactions.TransactionScope())
{
if (job_id == 0)
{
_db.Update<company>()
.SetExpression("next_job_number").EqualTo("next_job_number+1")
.Where<company>(x => x.company_id == company_id)
.Execute();
company c = _db.companies.SingleOrDefault(x => x.company_id == company_id);
job_number = c.next_job_number;
}
// Save the job
this.Save();
scope.Complete();
}
}
Кажется, это работает, но я не уверен, что здесь есть подводные камни? Это просто неправильно, но я не уверен, как еще это сделать.
Любой совет приветствуется.