2012-02-08 3 views
0

へのLINQを使用して挿入トランザクションにレコードIDを返します:は、どのように私は、SQLの挿入コードにLINQを以下している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に一致するレコードを検索する場合は、データベーススキーマが有効な場合は、それらすべてに一致するレコードを1つだけ持つ必要があります。 –

+0

私の投稿は、ファイル名、パス、またはそれらのプロパティのどれにも依存しないと主張しています。ほとんどの場合、一意ではないためです。もちろんCreationTimeは一意でなければなりません。 –

+0

レコードのID列の値または物理レコードのROW_NUMBERを取得しようとしていますか? –

答えて

3

最初にIpsJobFileQueueインスタンスを継承してTable<TEntity>.InsertOnSubmit(TEntity)メソッドを呼び出す必要があります。その後、DataContext.SubmitChanges()メソッドが完了した後、IpsJobFileQueueオブジェクトの対応するプロパティから、割り当てられたプライマリキー値を取得できます。この例ではIpsJobFileQueue.Id

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

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

は、対応するデータベーステーブルのmapped to the primary key columnされている特性です。

+0

このコードでは、return record.IDにエラーが発生しています。そのようなプロパティは存在しません。 –

+0

@fullNelsonモデル内でデータベーステーブルの主キー列にマップされているプロパティから、オブジェクトに割り当てられたID値を取得できます。これは属性 '[Column(IsPrimaryKey = true)]でタグ付けされたプロパティです。 –

+0

テーブルを削除したedmlは(デザイナの)IpsJobFileQueueオブジェクトのID列をリストしません。だから、たとえそれが表示されない(インテリジェンスでさえない)ときに、私がどのようにID(馬鹿を意図したものではない)列を特定するのかがわかりません。私は私のdbaseまたは私のEDMLを作るときに一歩足を踏みにしましたか? –

関連する問題