当我插入新记录时,如何获得主键值?

时间:2009-04-25 06:09:47

标签: linq-to-sql

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

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

6 个答案:

答案 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()?在您这样做之前,不会对变更集进行评估。