【问题标题】:Entity Framework 4 getting primary key ID for inserted record实体框架 4 获取插入记录的主键 ID
【发布时间】:2011-06-24 09:57:33
【问题描述】:

我正在使用实体框架向我的 sql 数据库中插入一行。如果我要使用存储过程,那么我将能够返回我插入的记录的主键。

我能否返回使用实体框架插入的最后一条记录的 PK?

【问题讨论】:

    标签: c# .net entity-framework


    【解决方案1】:

    插入实体后,它应该已更新,以便映射到数据库中主键的属性具有新的 PK 值。

    【讨论】:

    • 在添加时会发生这种情况,还是我必须先保存对上下文的更改才能获得可用的 ID?
    • 修改需要提交到数据库中,add就放到上下文中,直到你命中数据库,PK值才会生成。
    • 请注意,由于 SCOPE_IDENTITY 错误,这并不总是完全可靠的。
    【解决方案2】:

    是的,你当然可以这样做。见例子:

    int id = 0;
    
    using (PC2Entities objectContext = new PC2Entities())
    {
       objectContext.ClientContacts.AddObject(clientContact);
       objectContext.SaveChanges();
       id = clientContact.Id;
    
       transaction.Complete();
    }
    

    id是PK。

    【讨论】:

      【解决方案3】:

      对于 Oracle.ManagedDataAccess.EntityFramework(版本 6.121 或更早版本)

      如果插入后仍然没有得到ID,则在主键属性上添加该属性。

      [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
       public string ID { get; set; }
      

      我不得不这样做,不知道为什么,可能是因为我使用的是 oracle 而实体框架对此不满意。

      编辑:我看到这个答案被否决了,我知道为什么,因为最新版本的 ODAP 不需要您输入 [DatabaseGenerated(DatabaseGeneratedOption.Identity)]。但对于旧版本来说确实如此。

      【讨论】:

        猜你喜欢
        • 2013-06-02
        • 2018-12-12
        • 1970-01-01
        • 2016-08-09
        • 1970-01-01
        • 2015-04-19
        • 2016-10-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多