2012-02-08 43 views
0

我有以下的LINQ to SQL插入代碼:如何回報使用LINQ插入交易記錄ID,以SQL

public static int InsertFileToQueue(FileInfo file) 
{ 
    int? recordID = null; 

    IpsDBDataContext db = new IpsDBDataContext(); 

    IpsJobFileQueue record = new IpsJobFileQueue(); 
    record.FileName = file.Name; 
    record.FilePath = file.FullName; 
    record.PickupDate = file.CreationTime; 

    record.StartTime = null; 
    record.EndTime = null; 
    record.ProcessCode = null; 

    db.SubmitChanges(); 

    return recordID; 
} 

某處後,我知道db.SubmitChanges()我需要添加一些代碼來檢索我剛剛插入的記錄上的ID。我不能依賴的東西是文件名(因爲許多這些文件將被命名爲相同的),當然不是任何時間。

那麼我要查詢什麼來獲取ID?

+0

使用SELECT語句。如果你做了INSERT,你應該能夠選擇添加記錄的ID。如果您執行SELECT並找到與FileName,FilePath,PickupDate,StartTime,EndTime,ProcessCode匹配的記錄(如果您的數據庫模式有效),則應該只有一條匹配所有這些記錄的記錄。 – 2012-02-08 20:03:32

+0

我的文章狀態我不能依賴文件名,路徑或任何這些屬性,因爲它們在大多數情況下不會是唯一的。 CreationTime應該是唯一的,當然。 – 2012-02-08 20:04:58

+0

您是否試圖獲取記錄或物理記錄的ROW_NUMBER上的標識列的值? – 2012-02-08 20:06:51

回答

3

首先,您應該調用Table<TEntity>.InsertOnSubmit(TEntity)方法,通過IpsJobFileQueue實例來堅持。然後,DataContext.SubmitChanges()方法完成後,您可以從IpsJobFileQueue對象的對應屬性檢索分配的主鍵值。

var db = new IpsDBDataContext(); 
var record = new IpsJobFileQueue(); 
db.IpsJobFileQueues.InsertOnSubmit(record); 
db.SubmitChanges(); 

return record.Id; // Contains the assigned primary key value 

在這個例子中IpsJobFileQueue.Id是一個已經對應的數據庫表的mapped to the primary key column財產。

+0

鑑於此代碼,我得到一個返回record.ID錯誤;它的財產不存在。 – 2012-02-08 20:14:07

+0

@fullNelson您可以從模型中已經映射到數據庫表中的主鍵列的屬性中獲取分配給該對象的標識值。那將是使用屬性'[Column(IsPrimaryKey = true)]'標記的屬性。 – 2012-02-08 20:25:29

+0

我丟棄表格的edml沒有列出IpsJobFileQueue對象上的標識列(在設計器中)。所以我不確定我是如何識別ID(沒有雙關語意圖的)列,當它沒有出現(甚至不是intellisense)。在製作我的dbase或我的edml時,我錯過了一個步驟嗎? – 2012-02-08 20:27:29