EF与KeyTable序列样式PK

时间:2012-11-06 12:31:56

标签: entity-framework wcf-ria-services ria lightspeed

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

“使用数据库中的表来存储下一个Id,并在每次需要新的ID块时从LightSpeed

中提升此值

我相信这就像Oracle序列一样。

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

使用EF5 / WCF RIA服务(最新)与Silverlight交谈。该项目的其余部分使用批量插入SSIS东西..而SL项目进行了一些插入。所以我需要遵循这个惯例。

1 个答案:

答案 0 :(得分:1)

我想这个问题从根本上讲是关于实体框架是否可以支持这种密钥生成方式,问题的第二部分是RIA服务是否可以与之集成。

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

这里有一个答案,表明EF没有NHibernate开箱即用的全面支持:

  

不幸的是,EF没有任何非常接近POID的东西   像NHibernate这样的生成器确实如此,尽管我听到类似的传闻   功能将包含在EF的下一个版本中。

来自HiLO for the Entity Framework

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

并不是太棘手
  

你只需要调用存储过程来获取值   要保存记录[可以把它放到]覆盖   在您的上下文中保存ChangeChanges()

在回答https://stackoverflow.com/a/5924487/5351

时,请参阅What is the best way to manually generate Primary Keys in Entity Framework 4.1 Code First

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

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

  

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

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

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