2012-02-08 100 views
0

我有以下的LINQ to SQL插入代码:如何回报使用LINQ插入交易记录ID,以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匹配的记录(如果您的数据库模式有效),则应该只有一条匹配所有这些记录的记录。 – 2012-02-08 20:03:32

+0

我的文章状态我不能依赖文件名,路径或任何这些属性,因为它们在大多数情况下不会是唯一的。 CreationTime应该是唯一的,当然。 – 2012-02-08 20:04:58

+0

您是否试图获取记录或物理记录的ROW_NUMBER上的标识列的值? – 2012-02-08 20:06:51

回答

3

首先,您应该调用Table<TEntity>.InsertOnSubmit(TEntity)方法,通过IpsJobFileQueue实例来坚持。然后,DataContext.SubmitChanges()方法完成后,您可以从IpsJobFileQueue对象的对应属性检索分配的主键值。

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

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

在这个例子中IpsJobFileQueue.Id是一个已经对应的数据库表的mapped to the primary key column财产。

+0

鉴于此代码,我得到一个返回record.ID错误;它的财产不存在。 – 2012-02-08 20:14:07

+0

@fullNelson您可以从模型中已经映射到数据库表中的主键列的属性中获取分配给该对象的标识值。那将是使用属性'[Column(IsPrimaryKey = true)]'标记的属性。 – 2012-02-08 20:25:29

+0

我丢弃表格的edml没有列出IpsJobFileQueue对象上的标识列(在设计器中)。所以我不确定我是如何识别ID(没有双关语意图的)列,当它没有出现(甚至不是intellisense)。在制作我的dbase或我的edml时,我错过了一个步骤吗? – 2012-02-08 20:27:29