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