0

Je crée une nouvelle application Silverlight en utilisant RIA. J'utilise une couche Business et une couche d'accès aux données, il ressemble à quelque chose comme ça ...Création de DataContext dans quelle couche?

Silverlight-> ASP.Net/RIA-> Bibliothèque de classes C# BLL-> C# DAL Mon modèle de cadre d'entité est accessible dans toutes les couches.

Je ne sais pas où créer le DataContext pour mes demandes Entity Framework. Devrais-je créer le contexte sur la couche RIA (ASP.Net) et le transmettre à la couche BLL, puis à la couche DAL, ou devrais-je le créer dans la couche DAL et transmettre le résultat LINQ?

Si je le crée dans le DAL et que je passe une entité en arrière, le chargement paresseux signifie que les données ne sont pas encore là. Est-il possible que mon contexte soit collecté avant que je puisse réellement interroger mes données à partir de la base de données?

Est-ce que je rencontrerai des problèmes de threading si je crée le contexte dans mon DAL?

Répondre

0

Si vous utilisez servcies RIA de toute façon, vous pourriez aussi bien utiliser LinqToEntitiesDomainService < EfModelGoesHere> et laisser les services RIA contenir un seul EF DataContext/modèle.

Nous utilisons nos propres POCO personnalisés pour la logique métier, mais les services RIA gèrent toutes les connexions du client vers nos différentes couches de données (y compris directe vers EF). Au besoin, nous transmettons le modèle EF unique (qui est stocké dans le membre ObjectContext du contexte de domaine). Il nous a semblé juste de conserver la référence EF, plutôt que de passer à un DomainService simple et d'ajouter des ajouts rapides (temporaires) au service de domaine très facilement puisque nous ne faisons que LINQ directement au modèle EF. Si nous le gérons plus bas, nous le ramenons constamment sur la couche RIA pour l'utiliser.

0

Vous créez le contexte de données dans votre partie Silverlight (client) de l'application. Je laisse normalement mon contexte dans une variable de ma classe pour que je puisse le réutiliser. Il ne sera pas récupéré garbage jusqu'à ce que toutes les références à la classe ont disparu. Voici un court exemple chargement de certains objets (entités) de la base de données de manière asynchrone (avec un rappel pour traiter les objets retournés):

public class MyClass 

    private _context as MyDomainContext 
    private _employees as list(of Employees) 

    public sub DoSomething() 
     _context = new MyDomainContext 
     _context.Load(_context.GetEmployeesQuery(), AddressOf EmployeesLoaded, Nothing) 
    end sub 

    public sub EmployeesLoaded(loadOp as LoadOperation(Of Employee)) 
     _employees = new list(of Employee)(loadOp.entities) 
    end sub 

end class 
+0

Scottie désignait l'Entity Framework * DataContext *, pas le * DomainContext *. Bel exemple propre de l'autre cependant. À votre santé –