OK ;) I'll have to go through this. Thank you very much for the link.
In my case it's not that easy to go for a Session per Form Pattern,
because I've got an MDI Application and it uses different DALs. So I
would have to give the same Session to all the different DALs. But I
clearly see the advantage of this concept.
I'll have a look at the link tomorrow at work. I'll post my experience
here!!!

Thanks to anybody helping here!!! Much appreciated!!!

On 28 Okt., 18:19, Jason Meckley <[email protected]> wrote:
> your dal uses an NH anti-pattern. the session scope is too short and
> there is no reason to call session.Flush, since you committed the
> transaction.
> you are still thinking in terms of tables and rows. you want to think
> in terms of objects and workflow/contexts.
>
> a common approach to winforms is session per form. that is each form
> has it's own session. open the session when the form is activated,
> dispose the session when the form is closed. as reads/writes are
> required use a transaction. here is an 
> examplehttp://msdn.microsoft.com/en-us/magazine/ee819139.aspx
>
> On Oct 28, 11:35 am, reflection <[email protected]>
> wrote:
>
>
>
> > > Would it work in your case to reattach the objects you are about to
> > > modify in the new ISession, modify them, and then letting NHibernate's
> > > cascading handle the removal?
>
> > Well at the moment the transaction Logic is complete nested in the
> > Dal. For every Type of Entity I've got a Dal. Inside the Dal I use one
> > Session for each method (e.g. FooDal.Save, FooDal.Load and so on).
> > Typically it looks like this:
>
> > public void Save(Foo foo)
> > {
> >   using (var session = SessionFactory.OpenSession())
> >   using (var tx = session.BeginTransaction())
> >   {
> >     session.Save(foo);
>
> >     tx.Commit();
> >     session.Flush();
> >   }
>
> > }
>
> > The next problem is that currently my UI is more or less directly
> > bound to the Foos and if I remove a Bar from Foo it is also removed
> > from the UI. I could modify it so that the deleted Bars are just
> > marked as deleted and removed when saving. But you will agree that
> > that's not what the user is used to. If I delete something it shall
> > disappear from the UI. If I hit the save Button later the changes go
> > to the database. If I don't hit the save button the changes are
> > discarded. The Binding would get pretty tough if would keep the
> > deleted items in the Foo.Bar Collection till the User pushes the save
> > button.
>
> > Can't I tell NHibernate that it should remove the whole thing instead
> > of just the reference to the parent? The easiest way would be to just
> > set of an SQL command to the database DELETE FROM BAR_TABLE WHERE
> > ID_BAR = :myDeletedBarId. But I can't imagine that this isn't possible
> > with NHibernate.
>
> > On Oct 28, 4:58 pm, Oskar Berggren <[email protected]> wrote:
>
> > > 2010/10/28 reflection <[email protected]>:
>
> > > > I tried this, but NHibernate can't track the change because my Entity
> > > > is detached. I think the problem is that at the moment if I call
>
> > > > session.Delete(bar)
>
> > > > It tries to remove the association between the parent and the child,
> > > > but it is not allowed to child the foreign key to null because the
> > > > column has a not-null constraint. But I want to delete the whole
> > > > record from the database.
>
> > > Would it work in your case to reattach the objects you are about to
> > > modify in the new ISession, modify them, and then letting NHibernate's
> > > cascading handle the removal?
>
> > > > Shall I refactor my Dal to use a Singleton for the Session? Then the
> > > > entities would never get detached...
>
> > > You most certainly shall not. :)  But you said session-per-request
> > > previously... what is your definition of request in your winforms app?
>
> > > /Oskar
>
> > > > This is a Windows Forms Application.
>
> > > > On Oct 28, 3:23 pm, Jason Meckley <[email protected]> wrote:
> > > >> inverse=true and cascade=all-delete-orphan
>
> > > >> var bar = session.Load<Bar>(1);
> > > >> session.Get<Foo>(2).Bars.Remove(bar);
>
> > > >> by removing bar from the collection of bars within Foo it becomes
> > > >> orphaned. nh detects the orphan and deletes it.
> > > >> by setting bar.Foo = null you are attempting to update the mapped
> > > >> column to null, which causes a foreign key reference error.
>
> > > >> On Oct 28, 8:24 am, reflection <[email protected]> wrote:
>
> > > >> > I think I can't get the full picture. Can you tell me how this helps
> > > >> > in my situation? I understand what it means, but I can't see how this
> > > >> > can be helpfull too me -.-
>
> > > >> > Thanks a lot!!!
>
> > > >> > On Oct 28, 1:34 pm, Oskar Berggren <[email protected]> wrote:
>
> > > >> > > See the last paragraph of 6.4 
> > > >> > > inhttp://nhforge.org/doc/nh/en/index.htmlforastartinghintregarding
> > > >> > > inverse.
>
> > > >> > > /Oskar
>
> > > >> > > 2010/10/28 reflection <[email protected]>:
>
> > > >> > > > Hello,
>
> > > >> > > > I've read a lot on the Internet but I can't find a solution for 
> > > >> > > > my
> > > >> > > > problem :(
>
> > > >> > > > Example:
>
> > > >> > > > public class Foo
> > > >> > > > {
> > > >> > > >  public IList<Bar> Bars { get; set; }
> > > >> > > > }
>
> > > >> > > > public class Bar
> > > >> > > > {
> > > >> > > >  public Foo Foo { get; set; }
> > > >> > > > }
>
> > > >> > > > So it's a classical many-to-one mapping.
>
> > > >> > > > The mapping:
>
> > > >> > > > Foo:
>
> > > >> > > > ...
> > > >> > > > <bag name="Bars" inverse="true" cascade="none" lazy="true">
> > > >> > > >  <key column="ID_FOO" />
> > > >> > > >  <one-to-many class="Bar"/>
> > > >> > > > </bag>
> > > >> > > > ...
>
> > > >> > > > Bar:
>
> > > >> > > > ...
> > > >> > > > <many-to-one fetch="select" index="IDX_BAR_FOO" name="Foo" 
> > > >> > > > class="Foo"
> > > >> > > > column="ID_FOO" cascade="none" not-null="true" foreign-
> > > >> > > > key="FK_BAR_FOO" />
> > > >> > > > ...
>
> > > >> > > > I use Session per Request pattern. So I do only have detached 
> > > >> > > > entities
> > > >> > > > in my code.
>
> > > >> > > > Now if I load a Foo with some Bars from the Database, the tree 
> > > >> > > > may
> > > >> > > > look like this:
>
> > > >> > > > Foo1
> > > >> > > > |->Bar1
> > > >> > > > |->Bar2
> > > >> > > > |->Bar3
>
> > > >> > > > Now I remove one Bar from Foo1:
>
> > > >> > > > Foo1.Bars.Remoe(Bar1);
> > > >> > > > Bar1.Foo = null;
>
> > > >> > > > The problem is that I can't do
>
> > > >> > > > session.Delete(Bar1);
>
> > > >> > > > It always tells me that Foo can't be NULL. That's OK. But how do 
> > > >> > > > I
> > > >> > > > tell NHibernate to delete the whole row? If the entities would 
> > > >> > > > not be
> > > >> > > > detached I could use delete-orphan on the collection, but since 
> > > >> > > > the
> > > >> > > > childs are detached this doesn't work neither :(
>
> > > >> > > > I hope anybody has an idea how to solve this.
>
> > > >> > > > Thanks in advance!!!!
>
> > > >> > > > Greetings
>
> > > >> > > > --
> > > >> > > > You received this message because you are subscribed to the 
> > > >> > > > Google Groups "nhusers" group.
> > > >> > > > To post to this group, send email to [email protected].
> > > >> > > > To unsubscribe from this group, send email to 
> > > >> > > > [email protected].
> > > >> > > > For more options, visit this group 
> > > >> > > > athttp://groups.google.com/group/nhusers?hl=en.-Hidequotedtext-
>
> > > >> > > - Show quoted text -- Hide quoted text -
>
> > > >> - Show quoted text -
>
> > > > --
> > > > You received this message because you are subscribed to the Google 
> > > > Groups "nhusers" group.
> > > > To post to this group, send email to [email protected].
> > > > To unsubscribe from this group, send email to 
> > > > [email protected].
> > > > For more options, visit this group 
> > > > athttp://groups.google.com/group/nhusers?hl=en.-Hidequoted text -
>
> > > - Show quoted text -- Zitierten Text ausblenden -
>
> - Zitierten Text anzeigen -

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to