【问题标题】:Handle generation of non-identity primary key处理非身份主键的生成
【发布时间】:2011-07-02 17:36:47
【问题描述】:

我们目前有没有主键标识的表。由于互操作性,更改它的成本太高。

我正在考虑处理 ObjectContext 的 SavingChanges 事件来设置它的值。

(伪代码)

void SavingChanges(context)
{
    foreach (var entity in context)
    {
        if (entity.HasIdentity) continue;

        entity.PrimaryKey = GetNextPrimaryKey(entity.Type);
    }
}

我只能考虑使用单独的连接来完成此操作。是的,GetNextPrimaryKey 将被优化以减少往返次数,但我想这足以解释整个想法。

它会起作用吗?我应该尝试不同的东西吗?

【问题讨论】:

  • 我想我应该做一个秒杀:)

标签: entity-framework transactions entity-framework-4 primary-key


【解决方案1】:

这取决于 GetNextPrimaryKey 方法中的逻辑。

如果您的方法在多个线程中执行,那么您将有机会将相同的键分配给多个对象。

但是,如果您的 GetNextPrimaryKey 推进您的密钥并始终返回一个新密钥,无论是否使用它,那么都没有问题。

但是如果你的逻辑只是简单的找出最后使用的key然后做key + 1,那么在多线程的情况下或者web应用中,就会产生冲突。

最好使用某种存储过程并始终从 SP 返回一个新密钥,因此在并行执行 GetNextPrimaryKey 的情况下不会有任何问题。

【讨论】:

    猜你喜欢
    • 2017-09-06
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    相关资源
    最近更新 更多