Bonjour,
J'ai voulu pousser un peu plus loin mon utilisation d'EF4 mais je me retrouve face a plein d'ennui...
et une belle exception:
J'ai une solution sur 4 couches (projets) :The ObjectContext instance has been disposed and can no longer be used for operations that require a connection
- Data
qui contient l'edmx
- Common
qui contient mes POCO.
Ils ont été construit automatiquement a l'Aide du T4 templates (POCO) via l'edmx.
J'ai juste déplacer le fichier tt contenant tout les modeles dans un projet a part.
Les liaisons sont bonnes et fonctionne bien.
- Services
C'est juste le requétage des données.
- un projet windows forms de test ... pour s'assurer du bon fonctionnement des méthodes contenus dans Services.
Plus tard, j'utiliserais un projet web...
bref...
Reprenons le projet Services et sa classe EntitiesProvider et la 1ere méthode à tester:
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public static IList<Schedule> GetSchedules() { using (var context = new CapBookingEntities()) { return (context.Schedules.OrderBy(s => s.Name).ToList()); } }
Le Schedule est bien l'objet model dans le projet common (POCO).
Pour ceux qui ont déjà utilisés le ADO.NET POCO Entity Generator... le code généré utilise une classe supplémentaire FixupCollection pour faire le lien entre toutes les entités.
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 //------------------------------------------------------------------------------ // <auto-generated> // This code was generated from a template. // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // </auto-generated> //------------------------------------------------------------------------------ using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; namespace CapBooking.Common { public partial class Schedule { #region Primitive Properties public virtual int ID { get; set; } public virtual string Name { get; set; } #endregion #region Navigation Properties public virtual ICollection<Service> Services { get { if (_services == null) { var newCollection = new FixupCollection<Service>(); newCollection.CollectionChanged += FixupServices; _services = newCollection; } return _services; } set { if (!ReferenceEquals(_services, value)) { var previousValue = _services as FixupCollection<Service>; if (previousValue != null) { previousValue.CollectionChanged -= FixupServices; } _services = value; var newValue = value as FixupCollection<Service>; if (newValue != null) { newValue.CollectionChanged += FixupServices; } } } } private ICollection<Service> _services; #endregion #region Association Fixup private void FixupServices(object sender, NotifyCollectionChangedEventArgs e) { if (e.NewItems != null) { foreach (Service item in e.NewItems) { item.Schedule_ID = ID; } } if (e.OldItems != null) { foreach (Service item in e.OldItems) { } } } #endregion } }
Maintenant, venons en a mon exception (dans le form.cs du projet winform):
A l'exécution, ça plante avec le:
Code : Sélectionner tout - Visualiser dans une fenêtre à part dgvResult.DataSource = EntitiesProvider.GetSchedules();
en bouche car La collection de Services dans l'objet Schedules n'est plus disponible...The ObjectContext instance has been disposed and can no longer be used for operations that require a connection
euh.. l'utilisation des POCO n'est pas censé ne pas se soucier de le connexion et des mappage avec la BDD ?
bref, je sais pas comment régler ce problème...
Partager