2012-04-04 58 views
0

我有以下代碼:Linq中檢索行SQL ID爲動態

var db = new IpsDBDataContext(connectionString); 

var record = new IpsJobQueue(); 

var config = new IpsJobFileConfig(); 

record.FileName = file.Name; 
record.FileNameConventionID = ....? 
record.PickupDate = DateTime.Now; 

// hard coded to follow suit with "unprocessed" flag in 
// IpsJobProcessCodes table. 
record.ProcessStatus = 1; 
record.CreationTime = file.CreationTime; 

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

db.IpsJobQueues.InsertOnSubmit(record); 

db.SubmitChanges(); 

我所關心的是record.FilenameConventionID = ...?

這裏行了,我需要將FileNameConventionID分配給ID (作爲外鍵)在IpsJobFileConfig表中,其中PublisherName列=「未確定」。這很容易做到,但問題是與此記錄類型(未確定)關聯的ID可能會隨着它被提升爲生產而發生變化。

所以我覺得我需要做的將分兩步。

  1. 查找其PublisherName = Undetermined
  2. 獲取有關該記錄的ID(因爲這將是動態的)的記錄。

現在的問題是:我如何反射地將ID從我選擇的記錄列中取出?

回答

2

現在你正在創建一個新的IpsJobFileConfig記錄,但不使用它。我猜你可以完全擺脫這一點。

你應該能夠(假設IpsJobFileConfig表正確的發佈者名稱的任何記錄將工作,因爲有可能是多行)閃避:

var config = db.IpsJobFileConfigs.First(c => c.PublisherName == "Undetermined"); 
record.FileNameConventionID = config.Id; 
1

你有一個JobQueue實例和相關先前存在的JobFileConfig實例。

你應該從數據庫中加載JobFileConfig,就像這樣:

JobFileConfig config = db.JobFileConfig.Where(c => c.PublisherName == "Undetermined").FirstOrDefault(); 

那麼你應該重視的新實例對象圖是這樣的:

config.JobQueues.Add(myJobQueue); 

不分配的ID 。不要InsertOnSubmit新的JobQueue實例。它連接到對象圖,當你調用SubmitChanges()時,DataContext將管理其餘的部分。它會將新實例保存到數據庫並將任何ID填充回到您的實例中。


PS:DataContext的實現IDispoable,所以你應該using它。

using(IpsDBDataContext db = new IpsDBDataContext(connectionString)) 
{ 
    ... 
}