17 messaggi dal 30 giugno 2007
Salve a tutti.
Sono una capra e so benissimo di esserlo... la risposta alla mia domanda sarà ovvia ma non capisco quale sia, dunque aiutatemi.

Stavo leggendo questo tutorial: http://www.linqitalia.com/articoli/linq/linq-to-sql-visual-studio-2008-p-3.aspx

Chi mi spiega perché se scrivo
a.code = "codice " + DateTime.Now.ToString(); 

i dati vengono poi salvati tranquillamente tramite assegnazione, mentre per inserire i dati in articles_author devo scrivere anche
a.articlesauthors.Add(aa1); 

???

In poche parole... perché devo usare ADD quando invece nel caso precedente i dati vengono salvati direttamente tramite assegnazione?

Grazie mille. So che la risposta sarà per voi facilissima :)
Modificato da koolmind il 22 ottobre 2008 21.53 -
Ciao,

reggiti forte e cerca di seguirmi, provo a raccontarti più o meno tutta la storiella
Allora... se tutti gli articoli avessero un solo autore, la classe Article avrebbe una proprietà di tipo Author e il caso sarebbe molto simile a quello di
a.code = "blablabla";

e più precisamente avresti qualcosa come
Author myAuthor = new Author();
author.Name = "Marco De Sanctis";
article.Author = myAuthor;

Semplice vero? Tra l'altro accade già una cosa simpatica: nulla vieta infatti che lo stesso autore scriva più articoli, no? Basta che due articoli puntino alla stessa classe Author.. ciò che abbiamo realizzato si chiama associazione molti-a-uno e fa il paio con la tradizionale foreign key sul database.
Se però un articolo può essere scritto da più autori, una semplice proprietà non ci va più bene, giusto? ecco perchè in questo caso ci sarà bisogno di una collection, in prima approssimazione una collection di Author, a cui dovremo aggiungere l'autore appena creato affinchè questo possa farne parte:
Author myAuthor = new Author();
author.Name = "Marco De Sanctis";
article.Authors.Add(myAuthor);

Questo è il caso di una associazione molti-a-molti, dato che un articolo può essere scritto da più autori e un autore può scrivere più articoli. Perfetto, se mi hai seguito fin qui ci siamo quasi... manca giusto l'ultimo passaggio. Nel mondo a oggetti tutto ciò che abbiamo scritto sembra funzionare perfettamente, ma su database è tutto un altro paio di maniche, tant'è che per memorizzare l'associazione tra articolo e i relativi autori abbiamo bisogno di una terza tabella, ArticoliAutori, che tenga traccia delle varie associazioni. Con LINQ to Sql, pertanto, siamo costretti a creare anche una ulteriore classe, che è un po' alter ego di questa tabella, che chiameremo ArticleAuthor. Di riflesso, quindi, Article avrà la sua bella proprietà ArticleAuthors (bravo, indovinato, sempre di tipo collection), in luogo della precedente Authors. A questo punto il codice si complica di pochissimo e diventa
// creo l'autore
Author myAuthor = new Author();
author.Name = "Marco De Sanctis";

// creo l'associazione
ArticleAuthor articleAuthor = new ArticleAuthor();
articleAuthor.Author = myAuthor;

// aggiungo finalmente l'associazione alla collezione di autori dell'articolo
myArticle.ArticleAuthors.Add(articleAuthor);


Spero di averti chiarito qualche dubbio, in caso contrario son qui
17 messaggi dal 30 giugno 2007
Sei stato chiarissimo e davvero gentilissimo!!

Effettivamente ci potevo arrivare anche io ad una soluzione di questo tipo... magari però tra 10 anni

Non ti preoccupare... non ti lascerò solo... sto imparando adesso ad usare LINQ per cui le mie domande saranno mooooolto frequenti!

Grazie ancora! SEI UN GENIO!!
956 messaggi dal 29 aprile 2002
aspè aspè.. non te ne puoi uscire con una desrizione di cos'è una associazione e cos'è una collezione.. a questo punto devi anche spiegare la differenza tra:
Associazione, Aggregazione e Composizione :D

(ammazza quanto sono rompipalle)
17 messaggi dal 30 giugno 2007
ammazza quanto sei fiscale!!

lascia stare il povero Cradle che è stato così gentile da rispondere alla mia domanda dopo pochissimo tempo!

proprio lo sai... spiegala te la differenza! così la imparo anche io
956 messaggi dal 29 aprile 2002
koolmind ha scritto:
ammazza quanto sei fiscale!!

lascia stare il povero Cradle che è stato così gentile da rispondere alla mia domanda dopo pochissimo tempo!

proprio lo sai... spiegala te la differenza! così la imparo anche io

eh.. allora non hai capito che il tuo post era il pretesto per farmelo spiegare :D hihi..
no cmq a parte gli scherzi c'è un buon post qui:
http://www.wininizio.it/forum/index.php?act=Print&client=printer&f=266&t=67421
17 messaggi dal 30 giugno 2007
Grazie mille... sapevo lo volevi spiegare... per questo te l'ho chiesto!

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.
Community
Ultimi messaggi
UTENTI ONLINE
    In primo piano

    I più letti di oggi

    Media
    In evidenza
    MISC