2009-04-25 70 views
7

我正在使用LINQ-to-SQL类。它有一个方法object.InsertOnSubmit()。但它返回无效,所以我可以在插入记录后获得主键值。当我插入新记录时,如何获得主键值?

我想要最近插入记录的主键值。

+0

dc.Object.InsertOnSubmit(newObj); dc.SubmitChanges(); 在调用上述函数之后,Harshal会要求获取数据库在插入该记录时设置的ID。 – Vikas 2009-04-25 06:34:35

回答

8

是(假设它是一个标识字段)。

独自调用InsertOnSubmit不会将插入发送到数据库。您需要调用SubmitChanges以便将当前datacontext实例中的任何更改发送到db。

调用SubmitChanges之后,可以访问调用InsertOnSubmit时使用的实例中的值。 http://msdn.microsoft.com/en-us/vbasic/bb737920.aspx#dynid

1

如果模型设置正确,应该在受影响的对象(刚插入的对象)上自动设置PK。

HTH。

赛斯

0

你插入记录后调用您的数据上下文的SubmitChanges()?除非你这样做,否则变更集不会被评估。

1

调用InserOnSubmit()后,主键值设置为youe表对象中的相应字符。您只需访问该属性即可获取主键。

7

总之,你并不需要:LINQ to SQL的执行插入(其中的SubmitChanges期间发生)

检查这个例子时,将填充你的价值观。对象本身被更新。

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 
    } 
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; 
相关问题