Meaning: if you want to have cascade actions on the database, you have to 
add them yourself, maybe using auxiliary database objects.

RP

On Thursday, May 15, 2014 5:26:27 PM UTC+1, Ricardo Peres wrote:
>
> Of course it doesn't, and it will never have! Cascade actions are 
> performed by NHibernate, not at the database level!
>
> RP
>
> On Thursday, May 15, 2014 4:50:11 PM UTC+1, Dawid Ciecierski wrote:
>>
>> Ricardo, thanks for your help but if you look closer at the resulting 
>> database (and/or the exported schema) you'll notice that the foreign key 
>> relationship has NO ACTION set for the ON DELETE event in the foreign key 
>> constraint. This works fine when executing everything via NHibernate's 
>> entity management methods, but fails when a simple DELETE is issued against 
>> the database.
>>
>> Dawid
>>
>> On Thursday, May 15, 2014 12:58:12 PM UTC+2, Ricardo Peres wrote:
>>>
>>> I have a similar mapping - Post and Tag - where one Post can have 
>>> several tags, which are just strings (sorry, don't have time to change it):
>>>
>>> this.Set(x => x.Tags, x =>
>>> {
>>>     x.Key(y =>
>>>     {
>>>             y.Column("post_id");
>>>             y.NotNullable(true);
>>>     });
>>>     x.Cascade(Cascade.All);
>>>     x.Lazy(CollectionLazy.NoLazy);
>>>     x.Fetch(CollectionFetchMode.Join);
>>>     x.Table("tag");
>>> }, x =>
>>> {
>>>     x.Element(y =>
>>>     {
>>>             y.Column("tag");
>>>             y.Length(20);
>>>             y.NotNullable(true);
>>>             y.Unique(true);
>>>     });
>>> });
>>>
>>>
>>> I am using set instead of bag, this is generally better, and in your 
>>> case, I imagine you don't want duplicate values stored.
>>> See if this works!
>>>
>>> RP
>>>
>>> On Thursday, May 15, 2014 11:31:13 AM UTC+1, Dawid Ciecierski wrote:
>>>>
>>>> Hello,
>>>>
>>>> Let me start by asking the moderator to please look at my previous post 
>>>> sent around Friday (May 9), as it went into much greater detail as well as 
>>>> linked to a sample project but for some reason was not approved... Would 
>>>> be 
>>>> grateful if you could look at it again as I spend a good several minutes 
>>>> describing what I'm trying to accomplish as best I could.
>>>>
>>>> Also wanted to add that this is a sister post to one on the developers 
>>>> group<https://groups.google.com/forum/#!topic/nhibernate-development/UTbygrpFz04>,
>>>>  
>>>> in which I tried to go into more technical aspects of this issue, but was 
>>>> still directed to this group :-)
>>>>
>>>> Without further ado thou. What I have is frequently updated and delete-d 
>>>> entity that is just a view on a more complex business domain. Each entity 
>>>> in this "view" has a child collection of simple strings (think tags). 
>>>> Because of the DELETE FROM [TableName] we regularly execute, I'd like 
>>>> to mark the foreign key relationship as ON DELETE CASCADE. Right now I 
>>>> do so manually but only because I've found no way to coerce NHibernate 
>>>> into 
>>>> seeing the relationship the same way. Ultimately I'd like to find a way to 
>>>> do so as the whole database is frequently rebuilt from scratch by 
>>>> SchemaExport and doing manual updates to multiple foreign key 
>>>> relationships 
>>>> is time-consuming. Below is a simple class with its mapping demonstrating 
>>>> the use case:
>>>>
>>>> public class Photo
>>>> {
>>>> public int Id { get; set; }
>>>> public string Name { get; set; }
>>>> public IList<string> Tags { get; set; }
>>>>
>>>> public Photo()
>>>> {
>>>> Tags = new List<string>();
>>>> }
>>>> }
>>>>
>>>> public class PhotoMap : ClassMapping<Photo>
>>>> {
>>>> public PhotoMap()
>>>> {
>>>> Lazy(false);
>>>> Id(p => p.Id);
>>>> Property(p => p.Name);
>>>> Bag(
>>>> p => p.Tags,
>>>> collectionMapping: collectionMapping =>
>>>> {
>>>> //collectionMapping.Inverse(true);
>>>> collectionMapping.Lazy(CollectionLazy.NoLazy);
>>>> collectionMapping.Cascade(Cascade.All | Cascade.DeleteOrphans);
>>>> },
>>>> mapping: mapping =>
>>>> {
>>>> //mapping.OneToMany(); // NH does not like this
>>>> mapping.Element(e => e.Column("tag_value"));
>>>> });
>>>> }
>>>> }
>>>>
>>>> When I uncomment the mapping.OneToMany line NHibernate tells me that 
>>>> there is an unmapped entity System.String, so clearly I'm going against 
>>>> its 
>>>> way of thinking (and on the developers' group Ricardo confirmed that 
>>>> one-to-many is for entities only). Will be grateful for any advice on how 
>>>> I 
>>>> can make it work.
>>>>
>>>> Best regards,
>>>> Dawid Ciecierski
>>>>
>>>> Ps. I've prepared a sample project that does not make actual database 
>>>> calls which I can link to, but will refrain myself from doing so just in 
>>>> case linking outside of Google Groups automatically puts my post in the 
>>>> moderator's trash.
>>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.

Reply via email to