想改善這個問題嗎? 更新問題,使其僅經過編輯此帖子來關注一個問題。 數據庫
去年關閉。 框架
我在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新手開發人員避免過分使用票房最高的答案來解決沒必要要的問題。