Note: is not "second approach"... when you have the on-delete="cascade" you have always to check how is set the "cascade" attribute.
For the documentation we will appreciate a patch to make it more clear. Thanks. On Mon, Apr 4, 2011 at 6:35 PM, Dzyann Leleur <[email protected]> wrote: > Hi Fabio, thanks again for your answer. > What you say comes handy, I will work that way. > > I am creating the db using Nhibernate, and everything is working fine, but > deletion, which actually works, it just takes a long time, since is not > doing one shot deletions. I am going to try using "on-delete="cascade" and > if it doesn't work well I can try the second approach you mention. > > Anyway in my previous mail, my question was not regarding this 2 methods, > because I havent tested them yet. > Was regarding using what is recomended on the documention: > 18.5.4. One shot deleteThat is not very clear, it says that by clearing > the collection of elements, the items should be deleted in one shot ( > list.Clear()) > And it mentions: > > one-shot-delete apply to collections mapped inverse="true". > > That is the first answer I got, and I tried to implement it and it didn't > work, from what Roger says, and what i could see on internet, actually > putting inverse="true" won't allow it work. So i am not sure if I am not > understanding the documentation, or maybe it is wrong. > > Regards, > > Dzy.- > > On Mon, Apr 4, 2011 at 6:21 PM, Fabio Maulo <[email protected]> wrote: > >> ehm... are you creating the DB using NH ? >> are you validating the schema using NH ? >> on-delete="cascade" works as espected but you have to check what NH think >> you have in the DB with what you really have; >> also you have to check the <cascade> configuration because even when you >> have the ON DELETE constraint (hard cascade) the delete operation may become >> "inefficient" due soft-cascade (logic cascade). >> in practice... if you have on-delete="cascade" and you are 100% that the >> child entity does not have any other soft-cascade with others entities, on >> delete, be sure that your <cascade> value does not includes neither "delete" >> nor "delete-orphans". >> >> btw >> session.CreateQuery("from Child c where c.Parent.Id = >> :theParent").ExecuteUpdate(); >> do the same work you done with Ado.NET >> >> On Mon, Apr 4, 2011 at 5:45 PM, Dzyann Leleur <[email protected]> wrote: >> >>> Hi Roger, thanks for your answer. >>> >>> That the parent know its children so far has been relevant for the >>> deletion case, which is needed. Now i do Understand if you guys consider >>> this shouldn't be handled by Nhibernate. That is why I sent an email here. I >>> have all the Web Application working with Nhibernate, and when I found this >>> problem, the easiest solution for me was just to use ado.net, that is >>> why in my initial email I asked if the best would be an approach like just >>> do the sql sentence (ado.net or such). >>> I asked help here because I wanted to try keep all the application using >>> Nhibernate, but if for cases like this doesn't make sense, is fine. >>> >>> I read what you said about the inverse=true, but I have certain confusion >>> with it. >>> On the link you gave me ( >>> http://www.nhforge.org/doc/nh/en/index.html#performance-collections-oneshotdelete) >>> says: >>> one-shot-delete apply to collections mapped inverse="true". >>> >>> Now from what I have been reading on internet this doesn't work, It >>> actually behaves like you say. So maybe the documentation is wrong? or i >>> just totally misunderstood what it says? >>> >>> Regards, >>> >>> Dzy.- >>> >>> >>> >>> On Mon, Apr 4, 2011 at 4:52 PM, Roger Kratz <[email protected]>wrote: >>> >>>> <<I am not going to perform operations like you put, for each item of >>>> the collection, we are just doing queries over them.>> >>>> >>>> Instead of letting the parent knows thousands of children, isn't enough >>>> if the child knows its parent? >>>> >>>> >>>> Anyhow.... >>>> >>>> Having inverse=true means that this side doesn't own the collection. >>>> AFAIK, this means that theCollection.Clear() won't do anything from a NH >>>> perspective. >>>> >>>> Try hql delete, plain ado.net or, as already mentioned, >>>> on-delete="cascade". >>>> >>>> >>>> >>>> ________________________________ >>>> Från: [email protected] [[email protected]] för Dzyann >>>> Leleur [[email protected]] >>>> Skickat: den 4 april 2011 20:04 >>>> Till: [email protected] >>>> Ämne: Re: [nhusers] Delete Cascade taking a long time >>>> >>>> Hi, >>>> The Domain, is designed as it is, is a very specific case, that doesn't >>>> happen much. And actually, is just an applicatin to migrate data, so the >>>> user doesn't have this problem of having such massive associations. >>>> >>>> I am not going to perform operations like you put, for each item of the >>>> collection, we are just doing queries over them. >>>> >>>> What I want to know if the way I set the deletion was correct. >>>> This is what i have (without the on-delete="cascade") >>>> >>>> <hibernate-mapping xmlns="urn:nhibernate-mapping- >>>> 2.2" default-access="property" auto-import="true" default-cascade="none" >>>> default-lazy="true"> >>>> <class xmlns="urn:nhibernate-mapping-2.2" mutable="true" name="Query, >>>> Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" >>>> table="`Query`"> >>>> <id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, >>>> Culture=neutral, PublicKeyToken=b77a5c561934e089"> >>>> <column name="Id" /> >>>> <generator class="identity" /> >>>> </id> >>>> <bag cascade="all-delete-orphan" inverse="true" name="NasLocations" >>>> mutable="true"> >>>> <key> >>>> <column name="Query_id" /> >>>> </key> >>>> <one-to-many class="NASLocation, Domain, Version=1.0.0.0, >>>> Culture=neutral, PublicKeyToken=null" /> >>>> </bag> >>>> <bag cascade="all-delete-orphan" inverse="true" name="MetadataItems" >>>> mutable="true"> >>>> <key> >>>> <column name="Query_id" /> >>>> </key> >>>> <one-to-many class="MetadataItem, Domain, Version=1.0.0.0, >>>> Culture=neutral, PublicKeyToken=null" /> >>>> </bag> >>>> >>>> Mapping for QueryMetadataItem and NasLocations relation with Query: >>>> >>>> <many-to-one class="Query,Domain, Version=1.0.0.0, Culture=neutral, >>>> PublicKeyToken=null" foreign-key="Query_id" name="Query"> >>>> <column name="Query_id" /> >>>> </many-to-one> >>>> >>>> I am deleting the items as follows: >>>> query.NasLocations.Clear(); >>>> query.MetadataItems.Clear(); >>>> >>>> And then removing the Query itself. >>>> The NasLocations items do not get deleted at all, and the MetadataItems >>>> get delete one by one. >>>> >>>> I did this following the link Roger gave me. I don't see what I am doing >>>> wrong. >>>> >>>> Regards, >>>> >>>> Dzy.- >>>> >>>> >>>> On Mon, Apr 4, 2011 at 2:48 PM, Fabio Maulo <[email protected] >>>> <mailto:[email protected]>> wrote: >>>> public class Country >>>> { >>>> ... >>>> ... >>>> public IEnumerable<Person> People{get; private set;} >>>> } >>>> >>>> using(var session = sf.OpenSession()) >>>> { >>>> var china = s.QueryOver<Country>().Where(x=> x.Name == >>>> "China").SingleOrDefault(); >>>> foreach(var person in china.People) >>>> { >>>> DoSomethingButComeBackTomorrowToSeeResult(); >>>> } >>>> } >>>> >>>> The link that Roger gave you is correct what is incorrect is the design >>>> of the domain. >>>> >>>> On Mon, Apr 4, 2011 at 2:33 PM, Dzyann Leleur <[email protected]<mailto: >>>> [email protected]>> wrote: >>>> Hi Fabio, >>>> What do you mean with that trying to map a collection that big is wrong? >>>> Do you mean like I shouldn't use NHibernate? Or that the collection >>>> shouldn't be that big? >>>> The collection is being created by a service, we don't have a choice but >>>> having that collection, there is no other way. The service is not working >>>> with Nhibernate to create the data. We are using Nhibernate for the User >>>> interface part, that creates queries on the data. But has the option to >>>> delete them too. >>>> >>>> When I saw how Nhibernate was behaving, I thought that maybe I shouldnt >>>> try to delete the collection with Nhibernate and just do it with SQL, but I >>>> wanted to see different options. >>>> I am going to try the "on-delete="cascade"", but, was the approach I >>>> implemented following the link: >>>> >>>> http://www.nhforge.org/doc/nh/en/index.html#performance-collections-oneshotdelete >>>> that Roger gave me, wrong? >>>> >>>> Regards, >>>> >>>> Dzy.- >>>> >>>> On Sun, Apr 3, 2011 at 10:04 PM, Fabio Maulo <[email protected] >>>> <mailto:[email protected]>> wrote: >>>> try to map a collection with 95K items is simple wrong and nothing more. >>>> btw you can use on-delete="cascade" >>>> >>>> >>>> On Fri, Apr 1, 2011 at 6:23 PM, Dzyann <[email protected]<mailto: >>>> [email protected]>> wrote: >>>> Hi, >>>> >>>> I have a an entity Query that has a lot of items Metadata in a >>>> relation "one-to-many". >>>> When I delete the Query, I want all its childs to be delete too, so I >>>> set cascade to all-delete-orphan. >>>> >>>> The items get deleted, but it takes a lot of time. The query can have >>>> many items, lets say 95k items. >>>> I checked out with the SQL Profiler to see what was going on, and I >>>> saw that each Metadata Item is getting deleted one by one like: >>>> >>>> exec sp_executesql N'DELETE FROM MyDatabase.dbo.[QueryMetadata] WHERE >>>> Id = @p0',N'@p0 int',@p0=302401 >>>> >>>> This takes time, and produces a bad user experience. I would like to >>>> hear out any recommendations. >>>> Maybe is better if I delete the items with a sql sentence? >>>> >>>> Thanks in advance for your help! >>>> >>>> Dzy.- >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "nhusers" group. >>>> To post to this group, send email to [email protected]<mailto: >>>> [email protected]>. >>>> To unsubscribe from this group, send email to >>>> [email protected]<mailto: >>>> nhusers%[email protected]>. >>>> For more options, visit this group at >>>> http://groups.google.com/group/nhusers?hl=en. >>>> >>>> >>>> >>>> >>>> -- >>>> Fabio Maulo >>>> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "nhusers" group. >>>> To post to this group, send email to [email protected]<mailto: >>>> [email protected]>. >>>> To unsubscribe from this group, send email to >>>> [email protected]<mailto: >>>> nhusers%[email protected]>. >>>> For more options, visit this group at >>>> http://groups.google.com/group/nhusers?hl=en. >>>> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "nhusers" group. >>>> To post to this group, send email to [email protected]<mailto: >>>> [email protected]>. >>>> To unsubscribe from this group, send email to >>>> [email protected]<mailto: >>>> nhusers%[email protected]>. >>>> For more options, visit this group at >>>> http://groups.google.com/group/nhusers?hl=en. >>>> >>>> >>>> >>>> -- >>>> Fabio Maulo >>>> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "nhusers" group. >>>> To post to this group, send email to [email protected]<mailto: >>>> [email protected]>. >>>> To unsubscribe from this group, send email to >>>> [email protected]<mailto: >>>> nhusers%[email protected]>. >>>> For more options, visit this group at >>>> http://groups.google.com/group/nhusers?hl=en. >>>> >>>> >>>> -- >>>> 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. >>>> >>>> -- >>>> 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. >>>> >>>> >>> -- >>> 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. >>> >> >> >> >> -- >> Fabio Maulo >> >> -- >> 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. >> > > -- > 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. > -- Fabio Maulo -- 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.
