我听说在Sql Server中Sequence比Identity更快。但是,我不认为在Entity Framework中使用它是个好主意。因为要在实体框架中使用序列,你应该进行额外的调用以获得下一个序列。
int sequence = context.Database.SqlQuery<int>("SELECT NEXT VALUE FOR MySequenceName").FirstOrDefault();
因此,我认为在实体框架中使用序列会比较慢。我对吗?有没有人有任何想法?
答案 0 :(得分:3)
是的,序列比身份更快,因为你从内存而不是从光盘中获取它。
它们可以在任意多种情况下使用,但我认为它们的真正力量是:
如果你不需要这些点,那么我只会使用身份,一次调用db,一次交易。 在实体框架中使用它,正如你所说,你需要一个额外的调用来获取密钥,这不会使它真正有用。
答案 1 :(得分:2)
不一定(您需要多次数据库调用),您可以将EF与存储过程结合使用,并将序列和插入中的ID检索逻辑放入存储过程中。这可以简化和抽象ID的检索和分配,因此您不必将其作为c#代码的一部分进行编写。
如果您想保持简单,只使用您认为速度至关重要的序列,并且不使用序列会影响Sql语句的性能。例如,在您希望执行大量批量插入的表上,或者想要预先确定id以使多个表中的插入更加简化。您可以继续使用Identity的所有其他表。
另请参阅前面的SO answer,其中介绍了如何在EF代码中使用Sequence,它几乎就是您在问题中已有的内容,但包含了其余的c#代码。
答案 2 :(得分:1)
我听说在Sql Server中,Sequence比Identity更快。
上次检查时,情况正好相反:Sequence and Identity Performance。当然,这种情况可能(并且可能会)在下一个SQL Server版本中发生变化,但是现在 - 你听错了。
关于“额外通话” - 你不认为纯粹的魔法师会在你的申请中出现scope_identity()
的结果,不是吗?