0

如何在 EF5 中实现 KeyTable 样式的标识方法

“使用数据库中的一个表来存储下一个 Id,并在每次需要新的 Id 块时推进这个值”来自LightSpeed

我相信这就像 Oracle 序列。

这感觉应该很容易(就像在 LightSpeed 中一样)。这为 ORM 提供了一种进行批量插入的简单方法,即一次可以获取 10 个身份,然后将批量插入回数据库。

我正在使用 EF5 / WCF RIA 服务(最新)与 Silverlight 交谈。项目的其余部分使用批量插入 SSIS 的东西.. SL 项目做了一些插入。所以我需要遵守这个约定。

4

1 回答 1

1

我想这个问题基本上更多的是关于实体框架是否可以支持这种类型的密钥生成,问题的第二部分是 RIA 服务是否可以与之集成。

它让我想起了 NHibernate 中可用的密钥生成策略的范围。

Here's an answer here表明EF没有像NHibernate那样“开箱即用”的全面支持:

不幸的是,EF 没有像 NHibernate 那样非常接近 POID 生成器的东西,尽管我听说类似的功能将包含在 EF 的下一个版本中。

来自HiLO 的实体框架

这个答案表明,在 RIA 服务中拦截 Save(特别是插入)并调用 SPROC 以获取新 ID 并不太棘手

您只需要调用存储过程来获取一个值,然后再保存记录 [可以将其放入] 在您的上下文中覆盖的 SaveChanges()

请参阅https://stackoverflow.com/a/5924487/5351以回答在实体框架 4.1 代码优先中手动生成主键的最佳方法是什么

和一个类似的答案在这里...... https://stackoverflow.com/a/5277642/5351

以下是一些关于可能使用 EF 实现 HiLo 生成器(一种更强大的密钥生成模式)的发现:

Hi/Lo 模式描述了一种在客户端而不是数据库上生成安全 ID 的机制。在这种情况下,安全意味着没有碰撞。这种模式之所以有趣,有以下三个原因:

  • 它不会破坏工作单元模式(检查这个链接和另一个)
  • 它不需要像其他 DBMS 中的序列生成器那样多次往返。
  • 与 GUID 技术不同,它生成人类可读的标识符。

来自http://joseoncode.com/2011/03/23/hilo-for-entityframework/

于 2012-11-21T10:39:53.980 回答