我正在使用LINQ-to-SQL类。它有一个方法object.InsertOnSubmit()。但它返回void,所以我可以在插入记录后获得主键值。
我想要最近插入记录的主键值。
答案 0 :(得分:8)
是(假设它是一个身份字段)。
单独调用InsertOnSubmit不会将插入内容发送到数据库。您需要调用SubmitChanges以便将当前datacontext实例中的任何更改发送到db。
调用SubmitChanges后,可以从调用InsertOnSubmit时使用的实例访问值。 Linq to sql将在执行插入时为您填充这些值(在SubmitChanges期间发生)
选中此示例:http://msdn.microsoft.com/en-us/vbasic/bb737920.aspx#dynid
答案 1 :(得分:7)
简而言之,您不需要。对象本身已更新。
public void Add(Person person)
{
using (MyEntities context = new MyEntities())
{
Context.Persons.InsertOnSaveChanges(person);
Context.SaveChanges();
}
}
public void Foo()
{
Person p = new Person { name = "John", age = 20 }
Add(p);
Int32 id = p.id; // id contains the newly inserted object's id
}
答案 2 :(得分:4)
这是一个如何运作的例子:
var dc = new MyDataContext();
var cust = new Customer{FirstName="John", LastName="Smith"};
dc.Customer.InsertOnSubmit(cust);
dc.SubmitChanges();
//after SubmitChanges(), the Id is filled from the database
var customerPrimaryKey = cust.Id;
答案 3 :(得分:1)
如果模型设置正确,则应自动在受影响的对象(您刚刚插入的对象)上设置PK。
HTH。
赛斯
答案 4 :(得分:1)
调用InsertOnSubmit()后,主键值将设置为youe表对象中的相应字段。您只需访问该属性即可获得主键。
答案 5 :(得分:0)
插入记录后,您是否在数据上下文中调用SubmitChanges()?在您这样做之前,不会对变更集进行评估。