-je utiliser LINQ 2 SQL dans l'un de mes projets et j'ai de nombreuses relations client -> documents1, documents2, documents3, Adresse, factures etc ....Pourquoi LINQ 2 SQL lorsque je rejette le contexte tente d'obtenir des relations enfants?
Lorsque vous utilisez la LoadWith (p => p.Documents1) ... etc J'ai des problèmes de performance, imaginez les clients 2000 avec toutes ces nombreuses relations chargées dans la liste en mémoire! L'autre sens Document -> Client n'est pas tellement un problème que la relation sa lumière.
Donc, je tente de supprimer tous les LoadWith et laisser simplement la relation client -> adresse. Maintenant, si je vais ouvrir un Document1 et ensuite ouvrir mes clients, je reçois une exception de disposition d'objet lorsque je sérialise mes clients. La méthode sérialiser renvoie essentiellement cette exception.
La méthode serialize:
public static T CloneObjectGraph<T>(this T obj) where T : class
{
var serializer = new DataContractSerializer(typeof(T), null, int.MaxValue, false, true, null);
using (var ms = new System.IO.MemoryStream())
{
serializer.WriteObject(ms, obj);
ms.Position = 0;
return (T)serializer.ReadObject(ms);
}
}
La méthode que je reçois les clients:
public List<Customer> GetCustomers()
{
using (MyDataContext db = new MyDataContext(MyDataContextManager.ConnectionString))
{
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Customer>(p => p.Address);
dlo.LoadWith<Customer>(p => p.Documents1);
dlo.LoadWith<Customer>(p => p.Documents2);
dlo.LoadWith<Customer>(p => p.Documents3);
dlo.LoadWith<Customer>(p => p.Documents4);
dlo.LoadWith<Customer>(p => p.Documents5);
dlo.LoadWith<Customer>(p => p.Documents6);
dlo.LoadWith<Customer>(p => p.Documents7);
dlo.LoadWith<Customer>(p => p.Documents8);
dlo.LoadWith<Customer>(p => p.Documents9);
dlo.LoadWith<Customer>(p => p.Documents10);
dlo.LoadWith<Customer>(p => p.Documents11);
db.LoadOptions = dlo;
return db.Customers.ToList();
}
}
Je veux supprimer toutes les LoadWith sauf relation d'adresses. Je déteste quand cette erreur ne se reproduit pas toujours mais dans certains cas je ne pouvais pas trouver.
Je pourrais deviner le constructeur de DataContractSerializer pour un changement mais je ne peux pas le faire correctement.
Toute aide appréciée!
Pouvez-vous donner un exemple comment ignorer ces propriétés? Je n'ai pas besoin des instructions LoadWith <>(). Je vous remercie –