我们目前拥有的表没有主键的标识。由于互操作性,改变它的成本太高。
我正在考虑处理ObjectContext的SavingChanges事件以设置其值。
(伪代码)
void SavingChanges(context)
{
foreach (var entity in context)
{
if (entity.HasIdentity) continue;
entity.PrimaryKey = GetNextPrimaryKey(entity.Type);
}
}
我只能考虑使用单独的连接来完成此任务。是的,GetNextPrimaryKey将被限制为减少往返次数,但我想解释整体想法是不够的。
它会起作用吗?我应该尝试不同的东西吗?
答案 0 :(得分:0)
这取决于方法GetNextPrimaryKey中的逻辑。
如果您的方法在多个线程中执行,那么您将有机会将相同的键分配给多个对象。
Buti如果您的GetNextPrimaryKey推进您的密钥并始终返回一个新密钥,无论是否使用它,那么就没有问题。
但是,如果您的逻辑只是找出最后使用的密钥并执行密钥+ 1,那么在多线程情况或Web应用程序中,您将遇到冲突。
最好是使用某种存储过程并始终从SP返回一个新密钥,因此在并行执行GetNextPrimaryKey时不会出现任何问题。