Domanda

Sto cercando di utilizzare EF4 con l'oggetto SqlDependency con non molta fortuna.

Ho creato la mia coda e il servizio e voglio che la mia applicazione WPF per monitorare questa coda per i dati cambia in modo che possa aggiornare l'interfaccia utente (optato per provare questo, piuttosto che costantemente interrogando il database).

Anche se su chiamata ho un'applicazione di avvio;

SqlDependency.Start(connectString, "NewResultAddedQueue");

Il mio EF4 repository applicazione genera un'eccezione affermando;

  

{ "Quando si utilizza SqlDependency senza   fornendo un valore di opzioni,   SqlDependency.Start () deve essere chiamato   prima dell'esecuzione di un comando aggiunto   all'istanza SqlDependency. "}

In primo luogo, sto cercando di realizzare qualcosa che non è possibile con EF4 o c'è un altro approccio posso prendere per permettere la mia applicazione per l'ascolto delle modifiche dei dati da SQL 2005 ??

È stato utile?

Soluzione

In primo luogo, non è possibile utilizzare il proprio servizio di coda e se si dispone di più di un'istanza dell'applicazione in esecuzione WPF. L'infrastruttura SqlDependency lavora per AppDomain e se si condivide una coda poi le istanze (AppDomain) ruberà le notifiche l'una dall'altra con conseguente caos runtime. Se non si sa esattamente quello che stai facendo, basta usare l'implementazione di default (il just-in-time schierato servizio / coda / procedura).

Il messaggio di errore è abbastanza chiaro: 'Quando si utilizza SqlDependency senza fornire un valore opzioni bla bla bla'. Così non si fornisce un options valore , quindi il predefinito viene utilizzato:

  

Le opzioni di richiesta di notifica per essere   usato da questa dipendenza. null per l'uso   il servizio predefinito .

Allo stesso tempo, si sta sovrascrivendo il servizio predefinito nella chiamata .Start(). Come ho detto, meglio che il caso di default lavorando prima fino a che non sei sicuro di capire cosa sta succedendo, prima di avventurarsi in un comportamento non predefinito personalizzato, specialmente con qualcosa di così difficile da Grok come The mysterious notifica .

Dai un'occhiata alla LinqToCache per come utilizzare notifiche delle query con LINQ. L'articolo SqlDependency caching basato su LINQ query spiega come questa integrazione funziona con LinqToSQL e LinqToEF, e anche per questo non si può effettivamente usarlo con EF se LINQ è coinvolto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top