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”的表中分配FileNameConventionID给一个ID(作为外键) 。IpsJobFileConfig这很容易做到,但问题是ID与此记录类型(未确定)相关的问题可能会随着它被提升到生产环境而改变。

所以我认为我需要做的将分两个步骤。

  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 回答