Ricerca 
it-ITen-US
Registrazione
Accedi
In-Vesti Dotnetwork
IN-VESTI DNW!!!
Sono finalmente arrivate le nuovissime T-Shirt di DotNetWork!!! Con soli 15,00 € ci sosterrai nelle spese di gestione della Community e ti invieremo a casa una splendida maglietta.
Se vuoi contribuire al mantenimento di DotNetWork.it Vai sulla pagina Iscrizioni
Effettua il pagamento usando IWBank
Click per andare alla pagina di Iscrizione
Oppure un Bonifico bancario (le coordinate sono sulla pagina Iscrizioni), inviaci una mail a support@dotnetwork.it indicandoci la tua taglia e l'indirizzo di spedizione.  Non appena verificata la ricezione del pagamento provvederemo a spedirti la tua T-Shirt.  Le magliette sono disponibili nelle taglie S-M-L-XL-XXL (in caso di esaurimento di una delle taglie, indica quella di "Backup"). Grazie per IN-VESTIRTI con NOI!!!
.:DotNetWork Founders:.
    Stampa     


DotNetWork Forums
[vb2008] Entity Framework e databindings
Ultimo Post 23 mar 2010 12.07 by Hidden. 3 Risposte.
Stampa immediata
Ordina:
PrevPrev ProssimoProssimo
Non sei autorizzato ad inviare una risposta.
Autore Messaggi Non risolto

Posts:663

--
22 mar 2010 08.19  
Salva a tutti ragazzi ho un piccolo problema con entity framework e con il binding. Vi spiego dov'è il mio problema.
Ho creato un database con sql express 2008 al suo interno ho creato una tabella chiamata Cliente (senza nessuna relazione) con la chiave primaria applicata al campo Cliente_Id.
Nel mio programma ho creato il datamodel e il tutto per poter sfrutatte entity model. Ho aggiunto una nuova origine dati utilizzando l'oggetto clienti. l'operazione così mi crea in automatico un bindingsource chiamato ClientiBindingSource.
Nella form ho anche delle textbox per le quali ho impostato il binding con i campi di ClientiBindingSource.
Ora questo è il codice che ho inserito nella mia form

dim MioContext as new MioEntityModel

all'avvio della form eseguo il seguente codice

dim Query = MioContext.Cliente
MioBindingSource.datasource = query.

Il mio problema sta che se creo un nuovo elemento utilizzando il seguente codice

ClientiBindingSource.addnew
e così via e poi salvando il tutto con
MioContext.savechanges
Il tutto così funziona bene

se però provo a modificare i campi delle textbox me le fa modificare tutte ad eccezione del campo che ha come binding il campo Cliente_ID che è la chiave primaria della tabella.
Infatti attivo il focus in quel campo il programma non fa più niente non mi fa spostare più dalla textbox se non con l'utilizzo del pulsante tab.

Come posso fare per modificare il campo che ha la chiave primaria? Dove sto sbagliando?

Vi ringrazio in anticipo per il vostro aiuto.

Posts:435

--
22 mar 2010 09.39  
Non conosco Entity, ma cambiare la chiave primaria non e' una bella cosa.

Faccio un esempio:
ipotizziamo che tu abbia una tabella clienti, il cui campo IDCliente e' presente in ua seconda tabella Ordini.
Se cambio ID CLiente del sig Rossi da 1 a 2, cosa succede a tutti gli ordini che avevo inserito ????

Probabilmente Entity fa un controllo di questo tipo, e per cambaire una primary key devi forzare un po' la mano...

A mio avviso il tuo errore non e' di codice, ma di concetto.

HTH
Max.

Posts:663

--
22 mar 2010 10.50  
Sono pienamente daccordo con te. Però il problema che dici tu persisterebbe nel caso in cui la mia tabella avesse delle relazioni con altre tabelle.
Il problema è che la mia tabella non ha nessuna relazione impostata.

Posts:663

--
23 mar 2010 12.07  
Allora ho trovato la soluzione e la posto in quanto potrebbe servire anche ad altri.
Il problema o meglio il punto è che EF utilizza il campo chiave per eseguire le operazioni di insert delete update quando eseguito il metodo savechanges. Pertanto non è possibile modificarlo per aggirare l'ostacolo ho creato un altro campo definito come chiave primaria e ho impostato il campo Cliente_ID come indice univoco.
Poi all'interno del programma ho gestisco l'eccezione che mi restituisce nel caso in cui si tenti di duplicare il dati oppure utilizzo un qualcosa del genere (vado a memoria)

dim querycontrollo = miocontext.clienti.where("Cliente_ID", bla bla bla)
if querycontrollo.count >0 then
msgbox ("Impossibile salvare perchè esiste già")
else
miocontext.savechanges
end if
in questo modo verifico prima se un record con il valore che sto inserendo esiste già e poi se non esiste salvo altrimenti restituisco il messaggio che mi inviata a cambiare nome.

Sperando di essere stato utile
Vi ringrazio
Non sei autorizzato ad inviare una risposta.

Active Forums 4.1
       
Articoli
SQL Server Nozioni base (parte 1)
Come creare un database in SQL Server Usando Sql Management Studio
2008/03/09 | Autore: Sabrina Cosolo
Icone e Toolstrip
Icone della giusta dimensione e Toolstrip modificate a runtime
2009/06/28 | Autore: Sabrina Cosolo
Fritto misto - Classi di uso comune (parte 2)
Helper: Una classe per la Serializzazione XML delle classi dati
2007/10/21 | Autore: Sabrina Cosolo
Miniguida alla OOP con il .NET Framework- Parte IV
Come gestire l'ereditarietà
2009/07/17 | Autore: Alberto De Luca
ADO.NET Funzionalità di base
Effettuare una ricerca su recordset disconnessi tramite DataView
2007/12/02 | Autore: Andrea Zingoni
Addin per Live Writer
Programmer Paster, un Addin per Live Writer che colora il codice sorgente inserito nei Post dei Blog
2007/11/11 | Autore: Rudy Azzan
Fritto Misto - Classi di uso comune(parte 4)
Helper: Una classe per il log di eventi, con evento, event handler, enumerazione.
2007/10/24 | Autore: Sabrina Cosolo
.NET e l'Interoperabilità COM
Come utilizzare Dll non referenziabili per convertire un documento Word in PDF
2008/07/05 | Autore: Massimo Lofrano
    Stampa     
Home|Forums|Blogs|Mappa del sito
© 2007-2010 by DotNetWork  .:.  Condizioni d'uso  .:.  Privacy  .:.  Accedi  .:.