制御できない 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 思考モードでした。