40 messaggi dal 28 maggio 2009
Ciao a tutti,

Volevo chiaramenti su una cosa. Vi spiego la mia panoramica:

Ho due tabelle:

- Palestra (PalestraID, nome, via, cap)
- Atleta (AtletaID, PalestraID, nome, cognome)

La relazione è Palestre 1-molti con Atleti.

Ho mappato queste due tabelle con il designer di entity framework 4 utilizzando i template POCO di visualStudio 2010.

Nel mio livello Business dell'applicazione ho una funziona che mi ritorna un atleta dato il suo ID:

Function GetAtleta(ByVal AtletaID As Integer) As Atleta

   Using oMyContext As New MyContext

        Return oMyContext.Atleta.First(Function(o) o.AtletaID= AtletaID)


   End Using

    End Function


Ho la nessità di spostare un Atleta da una palestra all'altra e quindi di modificare la property PalestraID dell'entity Atleta nel livello UI dell'applicazione (quindi al di fuori del context):


dim oAtleta as Atleta = ManagerAtleti.GetAtleta(1)


oAtleta.cognome= "penna"
oAtleta.nome= "simone"
oAtleta.PalestraID = 10



A questo punto la mia applicazione va in errore alla riga "oAtleta.PalestraID = 10" :
"The ObjectContext instance has been disposed and can no longer be used for operations that require a connection"

Se invece di imposta la Property oAtleta.PalestraID al di fuori del context, la setto all'interno (all'interno del blocco "using" del context per capirsi) tutto funziona!!!

Mi sapete dire il perchè?

Spero di essere stato chiaro. Grazie

Dio non gioca a dadi con l'universo...tutto ha una logica!
Ciao , questo succede perché quando tu tenti di modificare una chiave collegata con un altra tabella, EF per controllare che tu stia inserendo un valore corretto, deve accedere alla tabella palestre!
40 messaggi dal 28 maggio 2009
Questo me l'ero immaginato, infatti nella funzione GetAtleta ho aggiunto include("Palestra")

Function GetAtleta(ByVal AtletaID As Integer) As Atleta

   Using oMyContext As New MyContext

        Return oMyContext.Atleta.Include("Palestra").First(Function(o) o.AtletaID= AtletaID)


   End Using

    End Function


Ma niente da fare, per le altre property tutto ok, ma la chiave esterna da ancora errore.
Mi sembra strana questa cosa. Vorrei evitare di creare una funzione UpdateAtleta(byval oAtleta as Atleta, byval PalestraID as integer) per poi all'interno del context modificare la property PalestraID e salvare.

Perchè se io avessi una tabella con tante chiave esterne, vorrebbe dire che per modificarle dovrei fare un metodo con n parametri tanti quanti sono le chiavi esterne. No bello da vedere...

Dio non gioca a dadi con l'universo...tutto ha una logica!
Be' volendo puoi utilizzare un object context comune e quindi non incorri in questo problema! Oppure passare nella funzione l'object context!
40 messaggi dal 28 maggio 2009
Ma se utilizzo un context all'interno del livello UI dell'applicazione non è corretto! Il context è la parte dell'accesso al dato. Vorrei evitare di usarlo in questo livello, in quanto se volessi trasformare la mia applicazione in un applicazione desktop, dovrei solo cambiare la parte UI!

Deve esserci un modo...

Dio non gioca a dadi con l'universo...tutto ha una logica!

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.