J'aimerais commencer une référence pour les personnes qui veulent passer du linq2sql à linq2entities et la ADO.net Cadre de l'Entité (ici appelé L2E). Je ne veux pas discuter de ces deux, c'est mieux. Je veux juste créer une liste de différences entre ces deux pour les personnes qui veulent passer de l'un à l'autre.
Les trucs de base est simple: supprimer le linq2sql classes de données, ajouter ado.net modèle (créé à partir de la base de données). Renommer 'Entités' au nom de l'ancien datacontext.
Maintenant, les différences. Par exemple, pour persister (enregistrer) des changements dans L2S j'utilise:
using (MyDataClassesDataContext mydc = new MyDataClassesDataContext())
{
// change data
mydc.SubmitChanges();
}
En L2E ce devrait être modifié afin de:
using (MyDataClassesDataContext mydc = new MyDataClassesDataContext())
{
// change data
mydc.SaveChanges();
}
2ème exemple, pour insérer un nouvel enregistrement dans L2S vous pouvez utiliser:
using (MyDataClassesDataContext mydc = new MyDataClassesDataContext())
{
MyTable myRow = new MyTable();
mydc.MyTable.InsertOnSubmit(myRow);
mydc.SubmitChanges();
}
En L2E ce devrait être modifié afin de:
using (MyDataClassesDataContext mydc = new MyDataClassesDataContext())
{
MyTable myRow = new MyTable(); // or = MyTable.CreateMyTable(...);
mydc.AddToMyTable(myRow);
mydc.SaveChanges();
}
Pour les autres extraits de code que je vais sauter le à l'aide de (...) une partie et la SubmitChanges/SaveChanges, puisque c'est le même à chaque fois.
Pour attacher un objet changé pour un datacontext/modèle dans L2 (à l'aide d'horodatage):
mydc.MyTable.Attach(myRow);
En L2E:
// you can use either
mydc.Attach(myRow);
// or (have not tested this)
mydc.AttachTo("MyTable", myRow);
Pour attacher un objet changé pour un datacontext/modèle dans L2 (à l'aide de l'objet d'origine):
mydc.MyTable.Attach(myRow, myOriginalRow);
En L2E (MSDN pour Appliquer les Modifications Apportées à un décollement de l'Objet):
mydc.Attach(myOriginalRow);
mydc.ApplyPropertyChanges(myOriginalRow.EntityKey.EntitySetName, myRow);
Pour supprimer un enregistrement dans L2S:
mydc.MyTable.DeleteOnSubmit(myRow);
En L2E:
mydc.DeleteObject(myRow);
Pour montrer la création des commandes SQL pour le débogage en L2:
mydc.Log = Console.Out;
// before mydc.SubmitChanges();
En L2E vous pouvez afficher le code SQL d'une requête (grâce à TFD):
using System.Data.Objects;
...
var sqlQuery = query as ObjectQuery;
var sqlTrace = sqlQuery.ToTraceString();
Malheureusement, je n'ai trouvé aucun moyen de sortie du SQL généré pour un appel à SaveChanges() - vous aurez besoin d'utiliser un générateur de profils SQL pour cela.
Pour Créer une base de données dans le schéma si aucun n'existe, L2S:
if (!mydc.DatabaseExists())
mydc.CreateDatabase();
En L2E:
// according to TFD there are no DDL commands in L2E
Pour exécuter une commande SQL sur la base de données en L2:
mydc.ExecuteCommand("ALTER TABLE dbo.MyTable ADD CONSTRAINT DF_MyTable_ID DEFAULT (newid()) FOR MyTableID");
En L2E:
Pour exécuter une eSQL de commande sur la base de données en EF (attention, eSQL ne prend pas en charge DDL ou DML (alter, Insert, update, delete) les commandes encore):
using System.Data.EntityClient;
...
EntityConnection conn = this.Connection as EntityConnection;
usi