2009-08-03 6 views
1

Voici mon problème. Je voudrais obtenir le dernier Id inséré avec une expression sql personnalisée dans Linq To Sql.Comment obtenir le dernier identifiant inséré dans une expression personnalisée SQL Linq To Sql?

Ma méthode d'insertion:

public int Add(string Label) 
{ 
    _dbContext.ExecuteCommand("INSERT INTO Products (Label) VALUES (@Label);", Label); 

    _dbContext.SubmitChanges(); 

    var lastId = _dbContext.ExecuteQuery<int>("SELECT Scope_Identity() as [Scope_Identity];").ToList()[0]; 

    return lastId; 
} 

lastId retourne toujours null. Lorsque j'ai essayé cette requête (Insert + Select) directement dans Sql Server, cela fonctionne parfaitement et renvoie le dernier Id inséré. Je ne souhaite pas utiliser une procédure et je ne peux pas utiliser un nouvel objet Product (il m'est impossible d'utiliser InsertOnSubmit ou autre).

Pouvez-vous s'il vous plaît aidez-moi? Merci.

Répondre

1

Ok j'ai trouvé comment le faire:

public int Add(string Label) 
{ 
    var query = String.Format("INSERT INTO Products (Label) VALUES (@Label); SELECT ProductId FROM Products WHERE ProductId = Scope_Identity();", Label); 

    var lastId = _dbContext.ExecuteQuery<int>(query).ToList()[0]; 

    return lastId; 
} 
0

Essayez d'utiliser:

INSERT INTO Products (Label) OUTPUT inserted.ProductID VALUES (@Label); 

Rob

+0

Merci pour votre réponse. Mais ça ne marche pas. Je ne suis pas en mesure de récupérer la sortie dans une variable. – Flesym

0

Je sais que vous avez déjà répondu, mais il y a moyen de anouther le faire que j'ai trouvé qui était utile pour mon scenerio particulier qui impliquait d'avoir besoin d'éditer les derniers enregistrements ajoutés à une table sans y connaître ids:

public int Add(string Label) 
{ 
    var query = String.Format("INSERT INTO Products (Label) VALUES (@Label);", Label); 
    _dbContext.ExecuteCommand(query); 
    var lastId = _dbContext.ExecuteQuery<int>("SELECT IDENT_CURRENT('Products ')").First(); 


    return lastId; 
}