2011-04-25 5 views
0

J'utilise Unity 2.0 pour enregistrer un référentiel concret SQL Server contre un dépôt abstrait comme ceci:DataContext ne pas voir les mises à jour

var context = new DataContext(
    ConfigurationManager.ConnectionStrings["DevDB"].ConnectionString 
); 

this.UnityContainer 
    .RegisterType<AlertQueueRepository, Sql.AlertQueueRepository>(
     new InjectionConstructor(context) 
    ); 

Le contexte est partagé entre tous les autres dépôts que j'ai. Cela fonctionne très bien dans l'application, cependant, si quelqu'un d'autre - requête SSMS, paquetage SSIS, autre application - modifie la base de données mes référentiels ne sont pas conscients de cela et ne verront pas la modification.

Est-ce un problème avec la façon dont j'utilise Unity? Peut-être que les contextes traînent trop longtemps? Ou est-ce quelque chose que j'ai besoin de configurer avec LINQ?

+0

Je voudrais ajouter que j'utilisais précédemment Ninject au lieu de Unity (changement orienté client). Lorsque j'utilisais Ninject, la ou les applications étaient exécutées comme je le souhaitais, les deux voyant les modifications de l'autre. Peut-être que Ninject se postait par requête? Est-ce quelque chose que je peux configurer pour que Unity fasse? – Yuck

Répondre

1

Cette question était similaire à la mienne il s'avère - ASP.NET MVC inject per request. Ce que je devais faire était que chaque requête enregistre son propre contexte car il a l'effet de côté que le contexte est expulsé après chaque requête. Maintenant, je suis juste parti pour considérer les implications de performance de ce modèle.

2

Considérons la réponse à cette question: Multiple application using one database?.

Si vous avez vraiment besoin de plusieurs applications pour accéder/modifier les données, envisagez de créer une couche au-dessus de la base de données pour traiter toutes les demandes.

+0

À droite, j'ai envisagé d'ajouter un service WCF que l'application Web et SSIS pourraient utiliser en commun. Il semble qu'il devrait y avoir un moyen plus facile pour LINQ d'être informé que son contexte est obsolète. Je ne pense pas que je serai jamais capable d'échapper complètement aux utilisateurs de type admin qui effectuent des modifications de données via SSMS. – Yuck

+0

C'est une solution acceptable et, d'après mes termes, je peux voir pourquoi vous l'avez suggéré. J'ai choisi d'aller d'une autre manière comme je l'explique dans la réponse que j'ai posté. Je suis upvoting car ce que vous avez fourni est utile et résoudrait le problème. – Yuck

Questions connexes