如何在实体框架中获取插入实体的ID? [关闭]

已关闭 。 这个问题须要更加 集中 。 它当前不接受答案。

想改善这个问题吗? 更新问题,使其仅经过编辑此帖子来关注一个问题。 数据库

去年关闭。 框架

我在Asp.net中遇到实体框架问题。 每当将对象添加到数据库时,我都想获取Id值。 我怎样才能作到这一点? ide


#1楼

请参考此连接。 ui

http://www.ladislavmrnka.com/2011/03/the-bug-in-storegenicpattern-fixed-in-vs-2010-sp1/ this

您必须将StoreGeneratedPattern的属性设置为identity,而后尝试本身的代码。 spa

不然您也可使用它。 .net

using (var context = new MyContext())
{
  context.MyEntities.AddObject(myNewObject);
  context.SaveChanges();

  int id = myNewObject.Id; // Your Identity column ID
}

#2楼

保存更改后,您须要从新加载实体。 由于它已被数据库触发器更改,但EF没法跟踪该触发器。 所以,咱们须要再次从数据库从新加载实体, code

db.Entry(MyNewObject).GetDatabaseValues();

而后 对象

int id = myNewObject.Id;

看看下面问题中的@jayantha答案: 开发

使用defaultValue时,如何获取实体框架中插入的实体的ID?

在下面的问题中查找@christian答案也可能有帮助:

实体框架刷新上下文?


#3楼

我遇到一种状况,我须要在数据库中插入数据,同时须要使用实体框架来获取主ID。 解决方案:

long id;
IGenericQueryRepository<myentityclass, Entityname> InfoBase = null;
try
 {
    InfoBase = new GenericQueryRepository<myentityclass, Entityname>();
    InfoBase.Add(generalinfo);
    InfoBase.Context.SaveChanges();
    id = entityclassobj.ID;
    return id;
 }

#4楼

Repository.addorupdate(entity, entity.id);
Repository.savechanges();
Var id = entity.id;

这将起做用。


#5楼

在使用实体框架时,我一直在使用Ladislav Mrnka的答案来成功检索ID,可是我在这里发布是由于我一直在滥用它(即在不须要它的地方使用它),并认为我会将个人发现发布在这里-案例中的人们但愿“解决”我遇到的问题。

考虑与客户具备外键关系的Order对象。 当我同时添加一个新客户和一个新订单时,我正在执行如下操做:

var customer = new Customer(); //no Id yet;
var order = new Order(); //requires Customer.Id to link it to customer;
context.Customers.Add(customer);
context.SaveChanges();//this generates the Id for customer
order.CustomerId = customer.Id;//finally I can set the Id

可是在个人状况下,这不是必需的,由于我在customer.Id和order.CustomerId之间具备外键关系

我所要作的就是这个。

var customer = new Customer(); //no Id yet;
var order = new Order{Customer = customer}; 
context.SaveChanges();//adds customer.Id to customer and the correct CustomerId to order

如今,当我保存更改时,还将为客户生成的ID添加到订单中。 我不须要其余步骤

我知道这并不能回答最初的问题,但我认为这可能会帮助EF新手开发人员避免过分使用票房最高的答案来解决没必要要的问题。

相关文章
相关标签/搜索