如何在Entity框架中获取没有saveChanges的插入实体的Id?

时间:2017-12-08 12:27:10

标签: c# entity-framework entity

我在Asp.net中遇到了Entity Framework的问题。每当我将对象添加到数据库而不执行SaveChanges()时,我想获取Id值。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

如果使用序列生成键值而不是IDENTITY列,则可以在插入数据库之前获取键值。

EF Core支持本地Sequences,您可以使用一些自定义SQL在EF6中执行此操作。

答案 1 :(得分:0)

//MyClass has Id as property, this is set by the DB server
var myObject = new MyClass { NotIdProp = someVal; }

int idAfterInsert; //or string if using GUID for Id

//transaction and then dispose DB context
using (var db = new MyContext())
{
    //add the entity object
    db.MyTable.Add(myObject);

   //now myObject will have its Id set by the DB server
   idAfterInsert = myObject.Id;

  //that's it if you don't want to Save Changes

}

但是,我没有看到一个有用的模式, 如果您的对象应该挂起而不是在此阶段保存,则只需添加另一个SQL 列,类似于已提交或已批准,并使其成为bit值(C#中的布尔值)。

然后在阅读记录时,不要通过过滤bool列来获取您不想要的记录。