Pour démarrer un projet utilisant Entity Framework 4 (avec l'approche Model first), il faut procéder ainsi :
.edmx
.Category
devient Categories
pour une collection).
LINQ-to-Entity ressemble à LINQ to SQL, mais n'utilise pas nécessairement les mêmes méthodes. Par exemple, le SingleOrDefault()
n'est pas utilisé. On utilise plutôt FirstOrDefault()
:
Employee employee = db.Employees.FirstOrDefault(b => b.Id == id);
Pour « insérer » un objet, il suffit de le créer et de l'ajouter au contexte. L'inscription à la base de données se fera automatiquement.
BookLibraryEntities context = new BookLibraryEntities(); Book book = new Book { Title = "titre", Author = "John Doe", ISBN = "000-0000000" }; context.AddToBooks(book); context.SaveChanges();
Exemple de code qui se sert de Repository avec Entity Framework.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Project.Models.Repositories { interface ICommandeRepository : IRepository { IList<Commande> ListAll(); IList<Commande> ListWaiting(); Commande GetByCommandNumber(int commandNumber); Commande GetById(int id); } }
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Project.Models.Repositories { public class CommandeRepository : ICommandeRepository { private LivraisonExpressEntities _dataContext; public CommandRepository() { _dataContext = ProjectEntities.GetInstance(); } public IList<Command> ListAll() { var commands = from c in _dataContext.Commands select c; return commands.ToList(); } public IList<Command> ListWaiting() { var commands = from c in _dataContext.Commands where c.Statut == Command._WAITING select c; return commands.ToList(); } public Command GetByCommandNumber(int commandNumber) { var command = _dataContext.Commands.Where(c => c.Id == commandNumber).FirstOrDefault(); return command; } public Command GetById(int id) { var command = _dataContext.Commands.Where(c => c.Id == id).FirstOrDefault(); return command; } } }
En essayant d'utiliser l'ObjectContext
d'un autre projet, il se peut qu'une erreur survienne :
The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid.
Si la solution est divisée en plusieurs projets avec un projet ayant le modèle du domaine et le modèle d'Entity Framework, pour que les autres projets puissent utiliser celui-ci, il faut copier la configuration du <connectionStrings>
dans les autres fichiers de configuration Web.config
ou app.config
des autres projets.
<connectionStrings> <add name="DataEntities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=xxx;Initial Catalog=xxx;User Id=xxx;Password=xxx;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" /> </connectionStrings>
Suite à cette modification, il se peut qu'un autre type d'erreur survienne lors de l'exécution :
Configuration system failed to initialize
Il faut donc déplacer la section <connectionStrings>
ailleurs dans le fichier, probablement plus bas. La raison de ce problème est inconnu, mais ceci a réglé un problème rencontré.