11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, mi fa piacere esserti stato d'aiuto!

jiamy ha scritto:

passare da perl a XpathExpression, da Zend a .Net e' stato per uno cresciuto nell'open source un passo cruento ;)

Quindi benvenuto su dotnet :)

jiamy ha scritto:

Sicuramente ti richiedero' altre delucidazioni visto l'inesperienza che ho in materia.

Certo, è più che comprensibile, il framework è abbastanza vasto. Eventualmente apri altri thread e, se non io, qualcuno di questa community saprà sicuramente darti dei consigli.

ciao!

Enjoy learning and just keep making
10 messaggi dal 12 maggio 2012
BrightSoul ha scritto:
ciao, mi fa piacere esserti stato d'aiuto!


scusa ancora il disturbo ma non riesco ad effettuare l'insert dinamica neanche con l'approccio CodeFirst:
nel mio caso ho: public DbSet<SitoModel> Siti { get; set; }
Supponiamo la mia funzione prenda in input una Dictionary<string,string> in cui la key e' il nome dell'attributo e il Value il suo valore.
Come faccio a creare una tabella Sito in cui associo in base al valore della key il corrispettivo valore essendo che ho notato che in quasi tutti i tutorial fanno delle insert banali tipo:
var sitomodel = new list<SitoModel>
{
new SitoModel{id = 1, name = "Antonio" e via dicendo}
new SitoModel {id=2, name ="Aldo",......}
};
db.Siti.Add(sitomodel);

Non riesco, o non ho ancora capito, a confrontare il valore della key con la lista di attributi della mia entita.
Hai qualche soluzione in merito?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, puoi valorizzare dinamicamente le proprietà del tuo oggetto SitoModel usando la reflection.
Tuttavia, per adesso lasciamo indietro questo discorso. Forse avrei dovuto chiedertelo prima ma, come mai hai la necessità di effettuare delle insert dinamiche? Spiega in cosa consiste il problema che devi risolvere e come l'utente deve interagire con la pagina web.

ciao

Enjoy learning and just keep making
10 messaggi dal 12 maggio 2012
BrightSoul ha scritto:
Spiega in cosa consiste il problema che devi risolvere e come l'utente deve interagire con la pagina web.
ciao


Nella view ho un pulsante Cataloga che lancia la mia funzione di ricerca di determinati valori in delle pagine xml, e compone una dictionary<string,string> da dover passare al db.
il mio problema è che non so che valori prendera' dai vari file di conseguenza sono costretto a scorrermi la dictionary e confrontare il valore della chiave con gli attributi del db, se la key ha lo stesso valore allora inseriscimi per quell'attributo il valore trovato, essendo pero' quasi 1000 attributi non volevo fare continuamente questo controllo, ma vedere se c'era un modo per passare direttamente la dictionary al db, una cosa del tipo:
var sitomodel = new SitoModel();

foreach(var key in dictionary.Keys)
{
  foreach(var attributo in Siti.ListaAttributi()) 
  {
    if(key == attributo)
       sitomodel.attributo = dictionary.Values.ToString();
  }
}
db.Siti.Add(sitomodel);
db.SaveChanges();
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
come ti dicevo puoi settare dinamicamente le proprietà di un oggetto usando la reflection, ma non è il migliore esempio di efficienza specialmente se l'oggetto ha 1000 (mille?!?) proprietà.

var sitomodel = new SitoModel();

foreach(var key in dictionary.Keys)
{
  var propertyInfo = typeof(SitoModel).GetProperty(key);
  if (propertyInfo != null)
    propertyInfo.SetValue(sitomodel, dictionary[Key], null);
}
db.Siti.Add(sitomodel);
db.SaveChanges();


In alternativa, dato che lavori con file xml, potresti anche usare la deserializzazione per costruirti l'oggetto SitoModel.

Ad ogni modo... il tuo oggetto SitoModel ha davvero 1000 proprietà? Spiega, praticamente, come mai sono così tante. Dovresti trovare un modo per organizzare le informazioni così da ridurne l'impatto sulla tua classe SitoModel.
Ad esempio, se le sue proprietà sono per la maggior parte booleane (sì/no o presente/non presente), forse potresti accorpare quelle dello stesso tipo in un'unica proprietà di tipo Enum che porti l'attributo [Flags].
http://www.codeguru.com/csharp/sample_chapter/article.php/c12963/Flags-Enumerations.htm
Esempio:
sitomodel.Moduli = Modulo.Carrello | Modulo.Blog | Modulo.Newsletter;
sitomodel.Lingue = Lingua.Italiano | Lingua.Inglese;


Oppure crei delle relazioni con altre tabelle... insomma, ci sono vari modi ma il giusto consiglio dipende da una buona comprensione del problema.

ciao
Modificato da BrightSoul il 11 giugno 2012 22.50 -

Enjoy learning and just keep making
10 messaggi dal 12 maggio 2012
BrightSoul ha scritto:
ciao,
come ti dicevo puoi settare dinamicamente le proprietà di un oggetto usando la reflection, ma non è il migliore esempio di efficienza specialmente se l'oggetto ha 1000 (mille?!?) proprietà.

Ciao, in effetti era la reflection la mia soluzione, cosa che Zend_Framework fa in automatico, ho risolto il problema finalmente e lo devo tutto alla tua dritta di studiarmi la reflection.


In alternativa, dato che lavori con file xml, potresti anche usare la deserializzazione per costruirti l'oggetto SitoModel.


Mi guarderò bene la deserializzazione anche se per quanto ne so fa copie dell'oggetto, ma volentieri ne approfondiro' lo studio.


Ad ogni modo... il tuo oggetto SitoModel ha davvero 1000 proprietà? Spiega, praticamente, come mai sono così tante. Dovresti trovare un modo per organizzare le informazioni così da ridurne l'impatto sulla tua classe SitoModel.
ciao
Modificato da BrightSoul il 11 giugno 2012 22.50 -


Sono obbligato a tenermi un oggetto con 1000 attributi di cui tutti o quasi sono stringhe, anche se spesso null, perche' essendo un progetto di tesi sperimentale e' il modo piu' intuitivo per dare una dimostrazione del mio algoritmo e avvalere la mia tesi.
Non so davvero come ringraziarti per le dritte datemi e spero vivamente di sentirti per altri consigli...Sicuramente, anche grazie alla tua disponibilità(cosa che di solito si trova solo nel mondo smanettone open_source ;) ) approfondiro' lo studio del mondo microsoft e dei suoi Framework.
ciao e ancora grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Prego! Anzi, grazie a te per la cordialità e in bocca al lupo per la tesi

Enjoy learning and just keep making

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.