24
juillet
2008
[LINQ] DataContext && Update
juillet
2008
Un article de UNi[FR]
Pas de commentaires
J’ai remarqué une chose qu’il est bon de noté dans un coin.
Lorsque l’on veut faire un update d’un objet, il est impératif de faire l’update avec le datacontext qui s’est occupé de récupérer l’objet.
Je m’explique…
je me suis créé une fonction qui permet de récupérer un objet selon son ID
public class Utils
{
public static monobjet getMonObjet(int inId)
{
if (Utils.m_db == null)
Utils.m_db = new DataClasses1DataContext("ma_chaine_de_connexion");
var _result =
(
from tbl in Utils.m_db.matable
where tbl.id == inId
select tbl
).ToList();
if (_result.Count > 0)
return _result[0];
return null;
}
}
une fois l’objet récupérer, j’effectue des modifications
var _strConn = "ma_chaine_de_connexion";
var db = new DataClasses1DataContext(_strConn);
db.Log = Console.Out;
var _obj = Utils.getMonObjet(_id);
_r.ordre = inOrder;
db.SubmitChanges();
et bien celà ne fonctionne pas pour la simple et bonne raison que le DataContext qui à récupérer l’objet n’est pas le même que celui qui fait l’update !
ce qui me donne pour la fonction static
public class Utils
{
public static monobjet getMonObjet(DataContext inContext, int inId)
{
var _result =
(
from tbl in inContext.matable
where tbl.id == inId
select tbl
).ToList();
if (_result.Count > 0)
return _result[0];
return null;
}
}
et pour mon code d’appelle
var _strConn = "ma_chaine_de_connexion";
var db = new DataClasses1DataContext(_strConn);
db.Log = Console.Out;
var _obj = Utils.getMonObjet(db, _id);
_r.ordre = inOrder;
db.SubmitChanges();