Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 非身份主键的句柄生成_Entity Framework_Transactions_Entity Framework 4_Primary Key - Fatal编程技术网

Entity framework 非身份主键的句柄生成

Entity framework 非身份主键的句柄生成,entity-framework,transactions,entity-framework-4,primary-key,Entity Framework,Transactions,Entity Framework 4,Primary Key,我们目前有一些表没有主键的标识。由于互操作性,改变这一点的成本太高 我正在考虑处理ObjectContext的SavingChanges事件以设置其值 (伪代码) 我只能考虑使用单独的连接来实现这一点。是的,GetNextPrimaryKey将被优化以减少往返次数,但我想它已经足够解释整个想法了 这样行吗?我应该尝试不同的方法吗?这取决于GetNextPrimaryKey方法中的逻辑 如果您的方法在多个线程中执行,那么您将有机会将同一个密钥分配给多个对象 但是,如果您的GetNextPrimar

我们目前有一些表没有主键的标识。由于互操作性,改变这一点的成本太高

我正在考虑处理ObjectContext的SavingChanges事件以设置其值

(伪代码)

我只能考虑使用单独的连接来实现这一点。是的,GetNextPrimaryKey将被优化以减少往返次数,但我想它已经足够解释整个想法了


这样行吗?我应该尝试不同的方法吗?

这取决于GetNextPrimaryKey方法中的逻辑

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

但是,如果您的GetNextPrimaryKey提升您的密钥并始终返回一个新密钥,无论是否使用,那么就没有问题

但如果您的逻辑只是找出最后使用的键并执行键+1,那么在多线程情况下或web应用程序中,您将遇到冲突


最好使用某种存储过程并始终从SP返回一个新密钥,这样在并行执行GetNextPrimaryKey时就不会出现任何问题。

我想我应该做一个spike:)
void SavingChanges(context)
{
    foreach (var entity in context)
    {
        if (entity.HasIdentity) continue;

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