如何在實體框架中獲取插入實體的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新手開發人員避免過分使用票房最高的答案來解決沒必要要的問題。

相關文章
相關標籤/搜索