想改善这个问题吗? 更新问题,使其仅经过编辑此帖子来关注一个问题。 数据库
去年关闭。 框架
我在Asp.net中遇到实体框架问题。 每当将对象添加到数据库时,我都想获取Id值。 我怎样才能作到这一点? ide
请参考此连接。 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 }
保存更改后,您须要从新加载实体。 由于它已被数据库触发器更改,但EF没法跟踪该触发器。 所以,咱们须要再次从数据库从新加载实体, code
db.Entry(MyNewObject).GetDatabaseValues();
而后 对象
int id = myNewObject.Id;
看看下面问题中的@jayantha答案: 开发
使用defaultValue时,如何获取实体框架中插入的实体的ID?
在下面的问题中查找@christian答案也可能有帮助:
我遇到一种状况,我须要在数据库中插入数据,同时须要使用实体框架来获取主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; }
Repository.addorupdate(entity, entity.id); Repository.savechanges(); Var id = entity.id;
这将起做用。
在使用实体框架时,我一直在使用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新手开发人员避免过分使用票房最高的答案来解决没必要要的问题。