我有以下代码:
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
可能会随着它被提升为生产而改变。
所以我认为我需要做的事情将分两步进行。
PublisherName = Undetermined
ID
(因为它将是动态的)。问题是:如何从我选择的记录栏中反复获取ID?
答案 0 :(得分:2)
现在你正在创建一个新的IpsJobFileConfig
记录,但没有使用它。我猜你可以完全摆脱它。
你应该能够逃脱(假设IpsJobFileConfig表中的任何记录都有正确的发布者名称,因为可能有多行):
var config = db.IpsJobFileConfigs.First(c => c.PublisherName == "Undetermined");
record.FileNameConventionID = config.Id;
答案 1 :(得分: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))
{
...
}