16 messaggi dal 13 maggio 2013
Salve a tutti,

Solo una semplice domanda: Entity Framework 6 gestisce i Synonyms creati con SQL Server?
Semplicemente devo accedere ad un paio di tabelle che sono su un altro DB e, a meno che di creare 2 context, non sono riuscito a trvare altre soluzioni .

Grazie!
16 messaggi dal 13 maggio 2013
KratosKaiBia ha scritto:
Salve a tutti,

Solo una semplice domanda: Entity Framework 6 gestisce i Synonyms creati con SQL Server?
Semplicemente devo accedere ad un paio di tabelle che sono su un altro DB e, a meno che di creare 2 context, non sono riuscito a trvare altre soluzioni .

Grazie!


Ok, ho risolto una parte dei miei problemi: sul Synonym ho creato una vista che posso importare con l'EF. Rimane un problema, l'update...
16 messaggi dal 13 maggio 2013
KratosKaiBia ha scritto:
KratosKaiBia ha scritto:
Salve a tutti,

Solo una semplice domanda: Entity Framework 6 gestisce i Synonyms creati con SQL Server?
Semplicemente devo accedere ad un paio di tabelle che sono su un altro DB e, a meno che di creare 2 context, non sono riuscito a trvare altre soluzioni .

Grazie!


Ok, ho risolto una parte dei miei problemi: sul Synonym ho creato una vista che posso importare con l'EF. Rimane un problema, l'update...


"Sarò breve e circonciso"(.Cit), perché sono al lovoro.
Ho trovato la soluzione, anche se mi pare che non freghi a nessuno di questo problema! ;(

Sinossi.
db A, mappato con EF6. A però deve utilizzare alcune tabelle (sia in lettura, sia in scrittura) all'interno del db B.

Soluzione.
Per la lettura è tutto relativamente semplice: prima creo un Synonym nel db A della tabella B.tbl_interessata e poi su questo sinonimo ci creo una vista vw_vista (le viste sono gestite in EF, ma solo per la lettura).

Per la scrittura, le cose si complicano.
dal file EF cancello tutti i riferimenti alla vista che ho creato nello step precedente. Su SQL Server Management Studio ricreo la struttura della tabella B.tbl_interessata in un'altra tabella di supporto. Faccio l'update della del modello (la vista la ignoro) e cancello da SQL la mia tabella di supporto. Fatto questo, faccio un replace in file di "tbl_interessata" con "vw_vista".
Con questa operazione faccio credere all'EF che la mia vista sia una tabella.

Da qui (http://blogs.msdn.com/b/alexj/archive/2009/09/01/tip-34-how-to-work-with-updatable-views.aspx) sono partito per risolvere il problema, ma attenzione che il suo workaround è più ostico di quanto non si pensi (i punti da modificare per "mentire" all'EF sono svariati, ed è per questo che ho optato per la creazione di una tabella di supporto).

Se non vi è chiaro qualcosa, chiedete pure :)
Modificato da KratosKaiBia il 18 dicembre 2014 12.00 -
11.097 messaggi dal 09 febbraio 2002
Contributi
E' interessante; personalmente non ho mai usato EF con i Synonym, quindi ti faccio delle domande:
  • Mi pare di capire che tu stia usando l'approccio database-first, quindi hai un file edmx, giusto? Il designer di Visual Studio non ti ha mostrato il Synonym nella finestra del wizard di aggiornamento quando hai provato ad aggiornare il modello? Non avendolo mai fatto, immaginavo che il Synonym ad una tabella fosse completamente trasparente e si mostrasse come proprio come una tabella fiscamente presente nel db locale.
  • Penso di non aver capito come mai ti è servito creare la vista. Se creassi solo la tabella di appoggio (con lo stesso nome e schema di quella remota); aggiornassi il modello dal designer di Visual Studio e poi eliminassi la tabella per sostituirla con il Synonym? Così non ti si porrebbe il problema della vista aggiornabile (?)
  • Con le transazioni come funziona? Cioè, se nello stesso contesto inserisci due entità di tipo diverso, una che verrà persistita in una tabella del db locale e una attraverso il Synonym che succede? Al SaveChanges, le due entità vengono persistite con una normale transazione, oppure diventa una transazione distribuita e perciò c'è bisogno che sul server sia installato il DTC?
  • Ora che il progetto è avviato probabilmente non è possibile ma... con code-first forse si sarebbero posti meno problemi? Ovvero, forse sarebbe bastato mappare l'entità sulla tabella. Non ci sarebbe stato bisogno di "convincere" il designer a lavorare con il Synonym.


Grazie e ciao,
Moreno
Modificato da BrightSoul il 18 dicembre 2014 13.14 -

Enjoy learning and just keep making
16 messaggi dal 13 maggio 2013
Ciao e grazie per la risposta! Ora proverò a spiegarmi meglio

BrightSoul ha scritto:
E' interessante; personalmente non ho mai usato EF con i Synonym, quindi ti faccio delle domande:
  • Mi pare di capire che tu stia usando l'approccio database-first, quindi hai un file edmx, giusto? Il designer di Visual Studio non ti ha mostrato il Synonym nella finestra del wizard di aggiornamento quando hai provato ad aggiornare il modello? Non avendolo mai fatto, immaginavo che il Synonym ad una tabella fosse completamente trasparente e si mostrasse come proprio come una tabella fiscamente presente nel db locale.


Sì, sto usando il db-first e ho un file edmx. Uno dei problemi era prorpio che il wizard non mi mostra il Synonym appena creato sul DB ed è per questo che ho dovuto creare la vista.


  • Penso di non aver capito come mai ti è servito creare la vista. Se creassi solo la tabella di appoggio (con lo stesso nome e schema di quella remota); aggiornassi il modello dal designer di Visual Studio e poi eliminassi la tabella per sostituirla con il Synonym? Così non ti si porrebbe il problema della vista aggiornabile (?)


  • Ho provato in questo momento a fare la modifica che mi ha consigliato ed effettivamente funziona anche senza view (EF lo si frega facilmente :) ).
    La vista era un retaggio iniziale per fare delle prove e me la sono portata dietro...

  • Con le transazioni come funziona? Cioè, se nello stesso contesto inserisci due entità di tipo diverso, una che verrà persistita in una tabella del db locale e una attraverso il Synonym che succede? Al SaveChanges, le due entità vengono persistite con una normale transazione, oppure diventa una transazione distribuita e perciò c'è bisogno che sul server sia installato il DTC?


  • Questa è una bella domanda, non so che potrebbe succedere in questo caso, vedrò di fare qualche prova.

  • Ora che il progetto è avviato probabilmente non è possibile ma... con code-first forse si sarebbero posti meno problemi? Ovvero, forse sarebbe bastato mappare l'entità sulla tabella. Non ci sarebbe stato bisogno di "convincere" il designer a lavorare con il Synonym.

  • Grazie e ciao,
    Moreno
    Modificato da BrightSoul il 18 dicembre 2014 13.14 -


    Sì, partendo da un code-first probabilmente avrei risolto una buona parte dei problemi, ma orami il tutto era già partito e ho preso quello che già c'era.

    Grazie mille per i consigli e spero di essermi chiarito.

    Steve.
    Modificato da KratosKaiBia il 18 dicembre 2014 14.29 -
    176 messaggi dal 12 luglio 2007
    grazie per aver condiviso la tua esperienza, a distanza di qualche anno rimane ancora molto interessante.

    Torna al forum | Feed RSS

    ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.