2014-09-25 81 views
7

我正在使用EF添加記錄。我想獲取最後一次插入的ID。以下是我的代碼:如何使用實體框架獲取上次插入的ID

string query = "INSERT INTO MyTable(PONumber, Status, UpdatedBy, UpdatedOn, CreatedOn) VALUES(@PO_NUMBER, '0', @STAFF, GETDATE(), GETDATE())"; 

parameterList = new List<object>(); 
parameterList.Add(new SqlParameter("@PO_NUMBER", poNumber)); 
parameterList.Add(new SqlParameter("@STAFF",staff)); 

parameters = parameterList.ToArray(); 

result = db.Database.ExecuteSqlCommand(query, parameters); 

query = "SELECT NewID = SCOPE_IDENTITY();"; 

var id = db.Lists.SqlQuery(query); 

如何從var id迭代記錄?

+0

如果你正在使用EF--爲什麼地球上你正在用原始SQL執行'INSERT'? EF的整點**是你可以處理好的**對象而不是原始的SQL!只需創建你的'MyObject',設置屬性,將它添加到EF上下文中,調用'.SaveChanges()',併爲你設置了'IDENTITY'屬性!沒有搞亂SQL需要.. – 2014-09-26 05:38:05

+0

@marc_s在asp.net和EF上第一次工作在asp.net上。因此,我發現我試圖根據自己的需要來實現它。你能幫我弄清楚你在說什麼嗎? – Volatil3 2014-09-26 06:00:56

回答

17

如果您使用的是EF,那麼整個問題就是您的不需要必須使用原始SQL來擺弄。而是使用EF生成的與數據庫表對應的對象類。

所以你的情況,我寧願做這樣的事情:

// create the EF context 
using(YourEFContext ctx = new YourEFContext()) 
{ 
    // create a new "MyTable" class 
    MyTable newEntity = new MyTable(); 

    // set its properties 
    newEntity.PoNumber = poNumber; 
    newEntity.Status = 0; 
    newEntity.CreatedOn = DateTime.Now; 
    newEntity.UpdatedOn = DateTime.Now; 
    newEntity.UpdatedBy = staff; 

    // add new entity to EF context 
    ctx.MyTable.Add(newEntity); 

    // save changes to database 
    ctx.SaveChanges(); 

    // read out your newly set IDENTITY value 
    int newIdentityValue = newEntity.ID; 
} 

清潔面向對象的代碼 - 沒有凌亂的SQL需要了!

0

如果您需要在用於插入表的模型中插入表而不觸發驗證,那麼該怎麼辦? DB中的IE字段不是必需的,插入的null可以工作,但在EF模型中它是必需的字段?