2009-04-25 20 views
7

Estoy usando la clase LINQ-to-SQL. Tiene un método object.InsertOnSubmit() .Pero devuelve el vacío así que puedo obtener valores de clave primaria después de insertar un registro.¿Cómo puedo obtener el valor de la clave principal cuando inserto un nuevo registro?

Quiero el valor de clave principal del registro insertado recientemente.

+0

dc.Object.InsertOnSubmit (newObj); dc.SubmitChanges(); Después de llamar a las funciones anteriores, Harshal solicita la identificación que la base de datos ha establecido al insertar ese registro. – Vikas

Respuesta

8

sí (suponiendo que es un campo de identidad).

Llamar InsertOnSubmit solo no envía el inserto a la base de datos. Debe llamar a SubmitChanges para que cualquier cambio en la instancia actual de datacontext se envíe a la base de datos.

Después de haber llamado a SubmitChanges, puede acceder a los valores de la instancia que utilizó al llamar a InsertOnSubmit. LINQ to SQL rellenará esos valores para que cuando se hace el inserto (que se produce durante SubmitChanges)

Comprobar este ejemplo: http://msdn.microsoft.com/en-us/vbasic/bb737920.aspx#dynid

1

Si el modelo está configurado correctamente, la PK debe configurarse en el objeto afectado (el que acaba de insertar) automágicamente.

HTH.

Seth

0

¿Estás llamando SubmitChanges() en su contexto de datos después de insertar el disco? El conjunto de cambios no se evaluará hasta que lo haga.

1

Una vez que haya llamado a InserOnSubmit(), el valor de la clave primaria se establece en los campos de corrosión en el objeto de la tabla youe. Simplemente puede acceder a esa propiedad para obtener la clave principal.

7

En resumen, usted no necesita. El objeto en sí se actualiza.

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

Aquí hay un ejemplo de cómo funciona:

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; 
Cuestiones relacionadas