У меня есть таблица MS SQL, которую я не могу контролировать, и мне нужно писать в нее. Эта таблица имеет первичный ключ int, который не увеличивается автоматически. Я не могу использовать хранимые процедуры, и я хотел бы использовать Linq to SQL, поскольку это упрощает другую обработку.
Мое текущее решение - прочитать последнее значение, увеличить его, попытаться использовать его, если я получу конфликт, увеличить его еще раз и повторить попытку.
Что-то в этом роде:
var newEntity = new Log()
{
ID = dc.Logs.Max(l => l.ID) + 1,
Note = "Test"
};
dc.Logs.InsertOnSubmit(newEntity);
const int maxRetries = 10;
int retries = 0;
bool success = false;
while (!success && retries < maxRetries)
{
try
{
dc.SubmitChanges();
success = true;
}
catch (SqlException)
{
retries++;
newEntity.ID = dc.Logs.Max(l => l.ID);
}
}
if (retries >= maxRetries)
{
throw new Exception("Bummer...");
}
У кого-нибудь есть лучшее решение?
РЕДАКТИРОВАТЬ: Благодаря Jon , я упростил расчет максимального идентификатора. Я все еще был в режиме мышления SQL.