Questo lo scenario:
una look-up table(t1) con ID as PK
una table(t2) con una FK sulla PK di t1

object model generato da LinqToSql include tra le properties del mio obj t2 la FK as int e a fronte della relazione parent-child di tipo one-to-one una property che e' istanza del record correlato su t1 ovvero
public class t2
...
int t1ID
t1 T1Instance
...

quando creo un'istanza di t2 per persisterla nel db avro':
t2Instance = new t2()

recupero l'istanza di t1 con linqTosql:
t1 t1Instance = _getT1ByID(1);

setto la porperty di t2
t2Instance.T1Instance = t1Instance
...

la spiacevole sorpresa e' che quando salvo nel db la nuova istanza di t2 nel db...un record nuovo e' stato aggiunto per t1 ovvero t1Instance e' stata aggiunta in t1

se invece di settare la proprieta' T1Instance setto semplicemente la property relativa alla FK ovvero:
t2Instance.t1ID = t1Instance.ID
tutto funziona bene...

mi chiedo se ho sbagliato qualcosa, se non ho settato qualche vincolo nell'object model di LinqToSql...
non so cosa fa di preciso il tuo metodo getT1ByID

ma ricorda sempre di riattaccare l'entità al contesto, o altrimenti come fai a mano "sincronizzare" gli id

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
_getT1ByID(1); ritorna un'istnaza di t1 by ID ovvero by PK
Ho deciso di isolare il datacontext(la mappatura di linqToSql sul db) ovvero ogni chiamata crea un'istanza nuova.
Mi stai dicendo che la ragione di questo comportamento "anomalo" e' dovuto all'uso di due istanza separate(uno per la select di t1 e una per salvare la nuova istnaza di t2) di DataContext?
si temo di si

nulla ti vieta di create due DataContext, ma devi per forza riattaccare poi l'entità proveniente da un altro DataContext al DataContext che poi utilizzi per l'update o l'insert

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
ok allora ricapitoliamo...:
t1Instance viena da DataContext1

t2 t2Instnace = new t2() -> verra' salvata da DataContext2

nostromo ha scritto:
ma devi per forza riattaccare poi l'entità proveniente da un altro DataContext al DataContext che poi utilizzi per l'update o l'insert

//questo penso sia il punto a cui il tuo commento si reiferisce...
// cosa intendi per "riattaccare"?
t2t2Instnace.T1Instance = t1Instance
Ok allora se uso un unico DataContext tutto funziona perfettamente anche se setto la property relativa all'istnaza della ParentKey:
ovvero
t2t2Instnace.T1Instance = t1Instance
con questa operazione mi sarei aspettato che la property che determina la relazione parent-child venissa aggiornata automaticamente a fronte del precedente assignement ma
t2t2Instnace.t1ID e' uguale a zero...
ho controllato nel codice autogenerato da LinqToSql e a fronte dell'assignement di una istanza relativa alla ParentKey non vi e' un automatico assignement...
strano...
quando crei due DataContext questi hanno vita completamente distinca, riattaccandola al contesto o usandone uno solo dovrebbe funzionare tutto

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
si grazie usando un unico context tutto funziona...
come faccio a "riattacare" un'istanza ad un differente DataContext???

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.