0

次のコードがあります。

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 = ...?

ここでは、PublisherName 列 = "Undetermined" であるテーブルFileNameConventionIDID(外部キーとして) にを割り当てる必要があります。IpsJobFileConfigこれは簡単に実行できますが、問題は、IDこのレコード タイプ (未定) に関連付けられているものは、本番環境に昇格するにつれて変更される可能性があることです。

だから私がする必要があると思うことは、2つのステップになります。

  1. そのレコードを見つけますPublisherName = Undetermined
  2. そのレコードを取得しIDます (動的であるため)。

問題は、選択しているレコードの列から ID を反射的に取得するにはどうすればよいかということです。

4

2 に答える 2

2

現在、新しいIpsJobFileConfigレコードを作成していますが、使用していません。あなたはそれを完全に取り除くことができると思います。

あなたは逃げることができるはずです (複数の行が存在する可能性があるため、正しい発行者名を持つ IpsJobFileConfig テーブル内の任意のレコードが機能すると仮定します):

var config = db.IpsJobFileConfigs.First(c => c.PublisherName == "Undetermined");
record.FileNameConventionID = config.Id;
于 2012-04-04T15:00:19.590 に答える
1

JobQueue インスタンスと、関連する既存の JobFileConfig インスタンスがあります。

次のように、データベースから JobFileConfig をロードする必要があります。

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

次に、次のように新しいインスタンスをオブジェクト グラフにアタッチする必要があります。

config.JobQueues.Add(myJobQueue);

ID を割り当てないでください。InsertOnSubmit新しい JobQueue インスタンスは使用しないでください。これはオブジェクト グラフに接続されており、 を呼び出すと DataContext が残りを管理しますSubmitChanges()。新しいインスタンスがデータベースに保存され、ID がインスタンスに戻されます。


PS: DataContext は を実装IDispoableしているため、それを行う必要がusingあります。

using(IpsDBDataContext db = new IpsDBDataContext(connectionString))
{
  ...
}
于 2012-04-04T18:38:51.913 に答える