2011-04-16 32 views
4

嗨,這是我第一個使用linq實體的項目。我已經想出瞭如何創建一個新記錄,我只需要獲得分配給它的ID,這樣我就可以在擴展表中使用它作爲FK。我允許用戶創建請求,請求可以針對多個設備,因此我有一個Request和RequestedEquipment表。這裏是代碼我使用創建請求:獲取使用linq添加到實體中的新記錄的編號

public void addReq(ReqType reqType, Employee reqBy, Location loc, string comm) 
     { 
      int reqID; 
      Request req = new Request(); 
      req.Comments = comm; 
      req.Employee = reqBy; 
      req.ReqType = reqType; 
       req.RequestStatus = findReqStat(1); 
      req.Location = loc; 
      entities.AddToRequests(req); 
      entities.SaveChanges(); 
     } 

我怎樣才能像被創造,所以我可以用它來創建一個在RequestedEquipment表所需項請求的ID?

回答

0

我相信您創建的對象將保存更改後會填充ID字段。

因此,在您的SaveChanges()行後,請檢查ID字段的值。

+0

那就是我在問怎麼做 – user695916 2011-04-16 17:28:58

8

你應該能夠調用的SaveChanges()後,從您的新Request對象拉ID值,所以是這樣的:

entities.SaveChanges(); 
reqID = req.ID; 

的SaveChanges()應該將新的記錄保存到數據庫中,如果ID列被設置爲數據庫中的標識列,那麼應該通過實體框架將該自動生成的標識傳回給您的對象。

同樣以防萬一,這裏是上一個問題,即ID字段沒有得到自動更新博客文章: http://dotnethacker.wordpress.com/2010/12/24/entity-framework-savechanges-doesnt-get-the-generated-identity-key/

1

Ryan和Mikecito都是對的。但是,如果你需要一個通用的解決方案來看看下面的函數:

public static T AddEntity<T>(T ent) 
{ 
    Type t = typeof(T); 

    try 
    { 
     using (Entities be = new Entities()) 
     { 
      be.AddObject(t.Name, ent); 
      be.SaveChanges(); 

      return ent; 
     } 
    } 
    catch (Exception) 
    { 
     return default(T); 
    } 
} 

這樣你可以創建所需的任何實體,並通過返回你會發現它的新標識新創建的實體。 HTH。

相關問題