在Linq-to-SQL中检索ID为动态的行
本文关键字:动态 ID Linq-to-SQL 检索 | 更新日期: 2023-09-27 18:30:04
我有以下代码:
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
分配给IpsJobFileConfig
表中的ID
(作为外键),其中PublisherName列="Undetermined"。这很容易做到,但问题是与此记录类型(未确定)相关联的ID
可能会在升级到生产时发生更改。
因此,我认为我需要分两步来做。
- 查找其
PublisherName = Undetermined
的记录 - 获取该记录上的
ID
(因为它将是动态的)
问题是:我如何反射性地从我选择的记录的列中获取ID?
现在您正在创建一个新的IpsJobFileConfig
记录,但没有使用它。我猜您可以完全摆脱它。
您应该能够逃脱(假设IpsJobFileConfig表中任何具有正确发布者名称的记录都可以工作,因为可能有多行):
var config = db.IpsJobFileConfigs.First(c => c.PublisherName == "Undetermined");
record.FileNameConventionID = config.Id;
您有一个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))
{
...
}