<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.guisa.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Architettura e design</title><link>http://www.guisa.org/forums/5.aspx</link><description>Il forum dove parlare di architettura, disegno applicativo, pattern, best practices e, in generale, degli aspetti legati alla progettazione del software.</description><dc:language>it</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Re: Cambiare l'entity key di una entit&amp;amp;amp;#195;&amp;amp;amp;#160;[ideaperversainside]</title><link>http://www.guisa.org/forums/thread/538.aspx</link><pubDate>Mon, 15 Mar 2010 08:24:38 GMT</pubDate><guid isPermaLink="false">9e4b1f7d-b93d-4652-904c-f0dafcd2f188:538</guid><dc:creator>Gian Maria Ricci</dc:creator><slash:comments>0</slash:comments><comments>http://www.guisa.org/forums/thread/538.aspx</comments><wfw:commentRss>http://www.guisa.org/forums/commentrss.aspx?SectionID=5&amp;PostID=538</wfw:commentRss><description>&lt;p&gt;Puoi quindi lavorare con id assegnati dal software e usare i guid per non avere problemi. A quel punto gli oggetti che vanno nel db non hanno problemi, gli metti l&amp;#39;id assigned, quelli che non vuoi mettere nel db e vuoi salvare da altre parti non hai comunque porblemi perch&amp;egrave; serializzando e deserializzando ti ritrovi l&amp;#39;id li, probabilmente &amp;egrave; la soluzione pi&amp;ugrave; semplice :)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;alk.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Re: Cambiare l'entity key di una entit&amp;amp;amp;#195;&amp;amp;amp;#160;[ideaperversainside]</title><link>http://www.guisa.org/forums/thread/531.aspx</link><pubDate>Tue, 09 Mar 2010 09:45:01 GMT</pubDate><guid isPermaLink="false">9e4b1f7d-b93d-4652-904c-f0dafcd2f188:531</guid><dc:creator>petrux</dc:creator><slash:comments>0</slash:comments><comments>http://www.guisa.org/forums/thread/531.aspx</comments><wfw:commentRss>http://www.guisa.org/forums/commentrss.aspx?SectionID=5&amp;PostID=531</wfw:commentRss><description>Ciao alk,&lt;br /&gt;
&lt;br /&gt;
alkampfer wrote:&lt;br /&gt;
&amp;gt; Alla fine se un oggetto non viene persistito &lt;br /&gt;
&amp;gt; non ha nemmeno molto senso che abbia un campo Id, la sua identità può &lt;br /&gt;
&amp;gt; essere garantita dal framework.&lt;br /&gt;
&lt;br /&gt;
E&amp;#39; un presupposto decisamente pretenzioso :-)&lt;br /&gt;
Nel mio caso - ad esempio - ad ogni oggetto va assegnato un ID univoco &lt;br /&gt;
che deve venire serializzato e al successivo editing deve rimanere lo &lt;br /&gt;
stesso. Quindi un modo per gestire &amp;#39;sta cosa, in qualche modo, me lo &lt;br /&gt;
dovrò pure inventare. :-)&lt;br /&gt;
&lt;br /&gt;
Ciao,&lt;br /&gt;
Giulio&lt;br /&gt;
--</description></item><item><title>Re: Cambiare l'entity key di una entit&amp;amp;#195;&amp;amp;#160; [ideaperversainside]</title><link>http://www.guisa.org/forums/thread/530.aspx</link><pubDate>Mon, 08 Mar 2010 13:47:52 GMT</pubDate><guid isPermaLink="false">9e4b1f7d-b93d-4652-904c-f0dafcd2f188:530</guid><dc:creator>Gian Maria Ricci</dc:creator><slash:comments>0</slash:comments><comments>http://www.guisa.org/forums/thread/530.aspx</comments><wfw:commentRss>http://www.guisa.org/forums/commentrss.aspx?SectionID=5&amp;PostID=530</wfw:commentRss><description>&lt;p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;img src="http://www.guisa.org/Themes/hawaii/images/icon-quote.gif"&gt; &lt;strong&gt;petrux:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;alkampfer wrote:
&lt;br /&gt;
&amp;gt; In questo caso la chiave guid, generata da te &amp;egrave; la cosa migliore, devi 
&lt;br /&gt;
&amp;gt; solo capire quali oggetti sono stati salvati e quali no per sapere se 
&lt;br /&gt;
&amp;gt; chiamare save o Update.
&lt;br /&gt;

&lt;br /&gt;
Uhm... e se non avessi la persistenza su un db?
&lt;/div&gt;&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;Se non hai la persistenza su db, non hai problemi, nel senso che quegli oggetti non li passi a nhibernate e magari li salvi da un&amp;#39;altra parte con altre tecniche etc etc. Alla fine se un oggetto non viene persistito non ha nemmeno molto senso che abbia un campo Id, la sua identit&amp;agrave; pu&amp;ograve; essere garantita dal framework.&lt;/p&gt;
&lt;p&gt;Alk.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Re: Cambiare l'entity key di una entit&amp;amp;#195;&amp;amp;#160; [ideaperversainside]</title><link>http://www.guisa.org/forums/thread/523.aspx</link><pubDate>Mon, 01 Mar 2010 09:42:56 GMT</pubDate><guid isPermaLink="false">9e4b1f7d-b93d-4652-904c-f0dafcd2f188:523</guid><dc:creator>petrux</dc:creator><slash:comments>0</slash:comments><comments>http://www.guisa.org/forums/thread/523.aspx</comments><wfw:commentRss>http://www.guisa.org/forums/commentrss.aspx?SectionID=5&amp;PostID=523</wfw:commentRss><description>Ciao alk,&lt;br /&gt;
&lt;br /&gt;
alkampfer wrote:&lt;br /&gt;
&amp;gt; In questo caso la chiave guid, generata da te è la cosa migliore, devi &lt;br /&gt;
&amp;gt; solo capire quali oggetti sono stati salvati e quali no per sapere se &lt;br /&gt;
&amp;gt; chiamare save o Update.&lt;br /&gt;
&lt;br /&gt;
Uhm... e se non avessi la persistenza su un db?&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Per il discorso dynamic proxy ti consiglio questo link &lt;br /&gt;
&amp;gt; http://kozmic.pl/archive/2009/04/27/castle-dynamic-proxy-tutorial.aspx &lt;br /&gt;
&amp;gt; si &lt;br /&gt;
&amp;gt; tratta di una libreria per la generazione dinamica di codice in grado di &lt;br /&gt;
&amp;gt; generare proxy per le tue interfacce, viene usata da nhibernate per fare &lt;br /&gt;
&amp;gt; il lazy load, ma considera che non sei bloccato solo ad usare castle, ma &lt;br /&gt;
&amp;gt; puoi usare anche altre librerie perchè dalle ultimke versioni di &lt;br /&gt;
&amp;gt; nhibernate è configurabile.&lt;br /&gt;
&lt;br /&gt;
Ok, gli do uno sguardo ASAP.&lt;br /&gt;
Anche se non mi serve nell&amp;#39;immediato, di sicuro &amp;quot;fa cultura&amp;quot;. :-)&lt;br /&gt;
&lt;br /&gt;
Ciao e grazie,&lt;br /&gt;
Giulio&lt;br /&gt;
--</description></item><item><title>Re: Cambiare l'entity key di una entit&amp;#195;&amp;#160; [idea perversainside]</title><link>http://www.guisa.org/forums/thread/522.aspx</link><pubDate>Sun, 28 Feb 2010 08:45:25 GMT</pubDate><guid isPermaLink="false">9e4b1f7d-b93d-4652-904c-f0dafcd2f188:522</guid><dc:creator>Gian Maria Ricci</dc:creator><slash:comments>0</slash:comments><comments>http://www.guisa.org/forums/thread/522.aspx</comments><wfw:commentRss>http://www.guisa.org/forums/commentrss.aspx?SectionID=5&amp;PostID=522</wfw:commentRss><description>&lt;p&gt;In questo caso la chiave guid, generata da te &amp;egrave; la cosa migliore, devi solo capire quali oggetti sono stati salvati e quali no per sapere se chiamare save o Update.&lt;/p&gt;
&lt;p&gt;Per il discorso dynamic proxy ti consiglio&lt;a href="http://kozmic.pl/archive/2009/04/27/castle-dynamic-proxy-tutorial.aspx"&gt; questo link http://kozmic.pl/archive/2009/04/27/castle-dynamic-proxy-tutorial.aspx &lt;/a&gt;si tratta di una libreria per la generazione dinamica di codice in grado di generare proxy per le tue interfacce, viene usata da nhibernate per fare il lazy load, ma considera che non sei bloccato solo ad usare castle, ma puoi usare anche altre librerie perch&amp;egrave; dalle ultimke versioni di nhibernate &amp;egrave; configurabile.&lt;/p&gt;
&lt;p&gt;alk.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Re: Cambiare l'entity key di una entit&amp;#195;&amp;#160; [idea perversainside]</title><link>http://www.guisa.org/forums/thread/521.aspx</link><pubDate>Sat, 27 Feb 2010 12:26:06 GMT</pubDate><guid isPermaLink="false">9e4b1f7d-b93d-4652-904c-f0dafcd2f188:521</guid><dc:creator>petrux</dc:creator><slash:comments>0</slash:comments><comments>http://www.guisa.org/forums/thread/521.aspx</comments><wfw:commentRss>http://www.guisa.org/forums/commentrss.aspx?SectionID=5&amp;PostID=521</wfw:commentRss><description>&lt;p&gt;Ciao alk,&lt;/p&gt;
&lt;p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;img src="http://www.guisa.org/Themes/hawaii/images/icon-quote.gif"&gt; &lt;strong&gt;Gian Maria Ricci:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;
&lt;p&gt;Per il discorso autocad il fatto &amp;egrave; questo, una session di nhibernte tiene tutti gli oggetti in memoria nella sua Identity Map Interna, per questa ragione non &amp;egrave; sempre consigliabile tenere la sessione viva per moltissimo tempo, devi fare una stima. Se vuoi tenere la sessione sempre attiva allora dovresti magari fare evict degli oggetti che non usi pi&amp;ugrave;. Se invece sai che non hai problemi di memoria puoi tenere sempre la stessa ma fai attenzione che&lt;/p&gt;
&lt;p&gt;1) Se in una transazione per qualche ragione fai il rollback la sessione va disposata, non la puoi pi&amp;ugrave; usare.&lt;/p&gt;
&lt;p&gt;2) Se in una operazione di salvataggio/inserimento o flush nhibernate fa eccezione, anche se tu la gestisci la sessione va disposata :)&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;
&lt;p&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Mumble mumble... facciamo un discorso &amp;quot;generale&amp;quot; (ma sempre aderente al mio caso). So che non ho problemi di memoria, quindi posso tranquillamente tenere in memoria tutti gli oggetti. Il problema dispose/salvataggio (insomma, del Dispose della session) non mi spaventa, nel senso che lo scenario non presenta troppi problemi da questo punto di vista. Il problema principale per&amp;ograve; sta nel fatto che:&lt;/p&gt;
&lt;p&gt;- &amp;egrave; difficile modellare il mio dominio in maniera che possa essere simile a una descrizione secondo il modello E-R&lt;/p&gt;
&lt;p&gt;- la persistenza non &amp;egrave; su un DB&lt;/p&gt;
&lt;p&gt;- la chiave va generata alla *creazione* dell&amp;#39;entit&amp;agrave; e non al suo salvataggio e deve essere valida anche se l&amp;#39;entit&amp;agrave; &amp;egrave; transiente&lt;/p&gt;
&lt;p&gt;Quindi alla fine, mutuando un po&amp;#39; qui e un po&amp;#39; l&amp;igrave;, dando uno sguardo a NHibernate e seguento attentamente i vostri consigli sono riuscito a impostare qualcosa di decente. Ora, devo capire bene il discorso dynamic proxy (qualche link?) ma credo di essere sulla buona strada.&lt;/p&gt;
&lt;p&gt;Ciao e grazie,&lt;/p&gt;
&lt;p&gt;Giulio&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-- &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Re: Cambiare l'entity key di una entit&amp;#195;&amp;#160; [idea perversainside]</title><link>http://www.guisa.org/forums/thread/520.aspx</link><pubDate>Sat, 27 Feb 2010 08:14:14 GMT</pubDate><guid isPermaLink="false">9e4b1f7d-b93d-4652-904c-f0dafcd2f188:520</guid><dc:creator>Gian Maria Ricci</dc:creator><slash:comments>0</slash:comments><comments>http://www.guisa.org/forums/thread/520.aspx</comments><wfw:commentRss>http://www.guisa.org/forums/commentrss.aspx?SectionID=5&amp;PostID=520</wfw:commentRss><description>&lt;p&gt;Chiavi autogenerate forzano l&amp;#39;ORM a fare insert immediatamente appena chiami il Save, questo ti pu&amp;ograve; dare problemi se ad esempoi hai scelto il FlushMode=Never, perch&amp;egrave; in realt&amp;agrave; quando inserisci il flush lo fa subito. Un esempio concreto&lt;/p&gt;
&lt;p&gt;Supponiamo che in una app web hai l&amp;#39;utente che naviga un wizard di X pagine, in ogniuna mette dei dati, alla fine decide se commitare tutto o no. Un possibile approccio &amp;egrave; quello di dire, ad ogni step io prendo gli oggetti, li salvo in session ma con flushmode = never alla fine decido se fare il flush. Purtroppo non funziona. (Cmq ci sono modi molto migliori di fare questo senza toccare il flush mode :) Era solo un piccolo esempio. ) &lt;/p&gt;
&lt;p&gt;Un altro problema &amp;egrave;, supponiamo di ammettere che il db possa essere disconnesso, ad esempio ho un tablet con cui l&amp;#39;utente viaggia in giro per un capannone con la wirless, avere la possibilit&amp;agrave; di dire, io intanto le entit&amp;agrave; le salvo, ma poi il flush lo faccio solo quando ho la rete e sono convinto che tutto vada pu&amp;ograve; essere un vantaggio.&lt;/p&gt;
&lt;p&gt;Per il discorso autocad il fatto &amp;egrave; questo, una session di nhibernte tiene tutti gli oggetti in memoria nella sua Identity Map Interna, per questa ragione non &amp;egrave; sempre consigliabile tenere la sessione viva per moltissimo tempo, devi fare una stima. Se vuoi tenere la sessione sempre attiva allora dovresti magari fare evict degli oggetti che non usi pi&amp;ugrave;. Se invece sai che non hai problemi di memoria puoi tenere sempre la stessa ma fai attenzione che&lt;/p&gt;
&lt;p&gt;1) Se in una transazione per qualche ragione fai il rollback la sessione va disposata, non la puoi pi&amp;ugrave; usare.&lt;/p&gt;
&lt;p&gt;2) Se in una operazione di salvataggio/inserimento o flush nhibernate fa eccezione, anche se tu la gestisci la sessione va disposata :)&lt;/p&gt;
&lt;p&gt;alk.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Re: Cambiare l'entity key di una entit&amp;#195;&amp;#160; [idea perversainside]</title><link>http://www.guisa.org/forums/thread/519.aspx</link><pubDate>Fri, 26 Feb 2010 17:43:09 GMT</pubDate><guid isPermaLink="false">9e4b1f7d-b93d-4652-904c-f0dafcd2f188:519</guid><dc:creator>petrux</dc:creator><slash:comments>0</slash:comments><comments>http://www.guisa.org/forums/thread/519.aspx</comments><wfw:commentRss>http://www.guisa.org/forums/commentrss.aspx?SectionID=5&amp;PostID=519</wfw:commentRss><description>Ciao alk,&lt;br /&gt;
&lt;br /&gt;
alkampfer wrote:&lt;br /&gt;
&amp;gt; In generale tutte le identità autogenerate dal db possono in generale &lt;br /&gt;
&amp;gt; causare problemi.&lt;br /&gt;
&lt;br /&gt;
E perchè? :-)&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Cmq io eviterei sessioni che durano *giorni*, puoi avere un impatto &lt;br /&gt;
&amp;gt; sulla memoria disarmante, visto che ogni ISession di nhibernate si tiene &lt;br /&gt;
&amp;gt; in memoria tutti gli oggetti che ha salvato/caricato/reidtratato.&lt;br /&gt;
&lt;br /&gt;
Si, va be&amp;#39; ma... mica lo decido io.&lt;br /&gt;
Se hai mai lavorato con AutoCAD, Simulink o robaccia del genere, capisci &lt;br /&gt;
anche che non è che posso salvare a ogni modifica. Se poi ci hai &lt;br /&gt;
lavorato e sai come sono fatti &amp;quot;dentro&amp;quot;... ancora meglio: vuota il &lt;br /&gt;
sacco! :-D&lt;br /&gt;
&lt;br /&gt;
Ciao e grazie,&lt;br /&gt;
Giulio&lt;br /&gt;
--</description></item><item><title>Re: Cambiare l'entity key di una entitÃ  [idea perversa inside]</title><link>http://www.guisa.org/forums/thread/518.aspx</link><pubDate>Fri, 26 Feb 2010 16:39:54 GMT</pubDate><guid isPermaLink="false">9e4b1f7d-b93d-4652-904c-f0dafcd2f188:518</guid><dc:creator>Gian Maria Ricci</dc:creator><slash:comments>0</slash:comments><comments>http://www.guisa.org/forums/thread/518.aspx</comments><wfw:commentRss>http://www.guisa.org/forums/commentrss.aspx?SectionID=5&amp;PostID=518</wfw:commentRss><description>&lt;p&gt;Propendo anche io per le chiavi Guid, che hanno un ulteriore vantaggio, durante la Save, nhibernate non deve per forza fare l&amp;#39;insert fisico dell&amp;#39;oggetto nella tabella per prendere l&amp;#39;id. In questo caso puoi lasciare comunque generare a lui il guid, cosi se hai un guid.null sai che non &amp;egrave; mai stato inserito in sessione, e puio usare il saveorUpdate. Altrimenti come dice mauro lo metti tu a mano, ma poi devi tenere traccia se l&amp;#39;oggetto &amp;egrave; persistente o meno, per capire se chiamare save o update. &lt;/p&gt;
&lt;p&gt;In generale tutte le identit&amp;agrave; autogenerate dal db possono in generale causare problemi.&lt;/p&gt;
&lt;p&gt;Cmq io eviterei sessioni che durano *giorni*, puoi avere un impatto sulla memoria disarmante, visto che ogni ISession di nhibernate si tiene in memoria tutti gli oggetti che ha salvato/caricato/reidtratato.&lt;/p&gt;
&lt;p&gt;alk.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Re: Cambiare l'entity key di una entitÃ  [idea perversa inside]</title><link>http://www.guisa.org/forums/thread/517.aspx</link><pubDate>Fri, 26 Feb 2010 16:16:07 GMT</pubDate><guid isPermaLink="false">9e4b1f7d-b93d-4652-904c-f0dafcd2f188:517</guid><dc:creator>Mauro Servienti [MVP]</dc:creator><slash:comments>0</slash:comments><comments>http://www.guisa.org/forums/thread/517.aspx</comments><wfw:commentRss>http://www.guisa.org/forums/commentrss.aspx?SectionID=5&amp;PostID=517</wfw:commentRss><description>Ciao Giulio,&lt;br /&gt;
&lt;br /&gt;
You wrote on 26/02/2010 :&lt;br /&gt;
&amp;gt;  A questo punto però mi chiedo: &lt;br /&gt;
&amp;gt;  - è quindi necessario che la property che sia mappata sulla chiave &lt;br /&gt;
&amp;gt;  primaria abbia un setter pubblico? &lt;br /&gt;
&lt;br /&gt;
no, basta che sia protected e NH via dynamic proxy all&amp;#39;atto dalla &lt;br /&gt;
creazione della entity sincronizza la key de db con quella della &lt;br /&gt;
entity.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;  - oppure è lecito pensare che dopo che la sessione viene resa &lt;br /&gt;
&amp;gt;  persistente l&amp;#39;istanza &amp;#39;foo&amp;#39; non sia più valida e debba quindi ri-caricarla? &lt;br /&gt;
&lt;br /&gt;
resta validissimissima :-)&lt;br /&gt;
&lt;br /&gt;
&amp;gt;  - in tal caso, come faccio nel mio caso in cui non sto lavorando su una &lt;br /&gt;
&amp;gt;  classica applicazione LOB/Enterprise, ma su una specie di CAD in cui le &lt;br /&gt;
&amp;gt;  sessioni possono durare anche *giorni* :-) e in cui la chiave primaria &lt;br /&gt;
&amp;gt;  di ogni entità deve essere devinita alla creazione (e non soltanto al &lt;br /&gt;
&amp;gt;  momento della sincronizzazione della persistenza)? &lt;br /&gt;
&amp;gt;  - qualora sia semplicemente vera la prima ipotesi (ovvero quella del &lt;br /&gt;
&amp;gt;  setter pubblico), fare qualcosa tipo: &lt;br /&gt;
&lt;br /&gt;
dipende molto dal contesto ma perch� non eneri tu la chiave &lt;br /&gt;
applicativamente? nel mapping poi spieghi ad NH queli sono le logiche &lt;br /&gt;
per cui capire se una entity e nuova (insert) o modificata (update), &lt;br /&gt;
tipicamente se lo scenario � disconnesso non ti puoi fidare del &amp;quot;db&amp;quot; &lt;br /&gt;
perch� non � detto che sia online quindi cme key uso un Guid che genero &lt;br /&gt;
applicativamente qando creo l&amp;#39;istanza dell&amp;#39;entit�:&lt;br /&gt;
&lt;br /&gt;
class MyEntity&lt;br /&gt;
{&lt;br /&gt;
   public virtual Guid Key{ get; protected set; }&lt;br /&gt;
&lt;br /&gt;
   public MyEntity()&lt;br /&gt;
   {&lt;br /&gt;
      this.Key = Guid.NewGuid();&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;gt;  Ciao e grazie, &lt;br /&gt;
&amp;gt;  Giulio &lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt;  --&lt;br /&gt;
&lt;br /&gt;
..m&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
Mauro Servienti&lt;br /&gt;
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}&lt;br /&gt;
Microsoft MVP - Visual C# / MCP&lt;br /&gt;
http://mvp.support.microsoft.com&lt;br /&gt;
http://blogs.ugidotnet.org/topics&lt;br /&gt;
whynot [ at ] topics [ dot ] it</description></item><item><title>Cambiare l'entity key di una entità [idea perversa inside]</title><link>http://www.guisa.org/forums/thread/516.aspx</link><pubDate>Fri, 26 Feb 2010 14:37:26 GMT</pubDate><guid isPermaLink="false">9e4b1f7d-b93d-4652-904c-f0dafcd2f188:516</guid><dc:creator>petrux</dc:creator><slash:comments>0</slash:comments><comments>http://www.guisa.org/forums/thread/516.aspx</comments><wfw:commentRss>http://www.guisa.org/forums/commentrss.aspx?SectionID=5&amp;PostID=516</wfw:commentRss><description>Ciao a tutti,&lt;br /&gt;
&lt;br /&gt;
prendendo come scenario una applicazione che usa NHibernate come ORM, &lt;br /&gt;
supponiamo di avere questo:&lt;br /&gt;
&lt;br /&gt;
ISession session = ..;&lt;br /&gt;
Foo foo = new Foo();&lt;br /&gt;
Object key = session.Save(foo);&lt;br /&gt;
&lt;br /&gt;
A questo punto, se non ho capito male, NHibernate tramite il mapping &lt;br /&gt;
capisce che la chiave primaria del mio oggetto foo è la sua property &lt;br /&gt;
&amp;quot;Id&amp;quot;, nel momento in cui l&amp;#39;entità persiste io mi ritrovo:&lt;br /&gt;
&lt;br /&gt;
Assert.AreEqual(foo.Id, key);&lt;br /&gt;
&lt;br /&gt;
Tutto ciò è molto fiqo.&lt;br /&gt;
A questo punto però mi chiedo:&lt;br /&gt;
- è quindi necessario che la property che sia mappata sulla chiave &lt;br /&gt;
primaria abbia un setter pubblico?&lt;br /&gt;
- oppure è lecito pensare che dopo che la sessione viene resa &lt;br /&gt;
persistente l&amp;#39;istanza &amp;#39;foo&amp;#39; non sia più valida e debba quindi ri-caricarla?&lt;br /&gt;
- in tal caso, come faccio nel mio caso in cui non sto lavorando su una &lt;br /&gt;
classica applicazione LOB/Enterprise, ma su una specie di CAD in cui le &lt;br /&gt;
sessioni possono durare anche *giorni* :-) e in cui la chiave primaria &lt;br /&gt;
di ogni entità deve essere devinita alla creazione (e non soltanto al &lt;br /&gt;
momento della sincronizzazione della persistenza)?&lt;br /&gt;
- qualora sia semplicemente vera la prima ipotesi (ovvero quella del &lt;br /&gt;
setter pubblico), fare qualcosa tipo:&lt;br /&gt;
&lt;br /&gt;
foo.Id = new object();&lt;br /&gt;
&lt;br /&gt;
non è impossibile. Mi chiedo: è semplicemente una cosa *molto* stupida, &lt;br /&gt;
benché possibile?&lt;br /&gt;
&lt;br /&gt;
Ciao e grazie,&lt;br /&gt;
Giulio&lt;br /&gt;
&lt;br /&gt;
--</description></item></channel></rss>