我有一个我无法控制的 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,我简化了最大 ID 计算。我仍然处于 SQL 思维模式。