Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fluent Nhibernate 1.0 - Specify foreign key constraint name between class and joined subclass

I think this should be simple, but I can't figure out how to do it. Suppose I have the following maps:

public class AnimalMap : ClassMap<Animal> { Id( x => x.Id); }

public class CatMap: SubclassMap<Cat> {
    Extends<AnimalMap>();
    Map(x => x.IsDomestic);
}

Which creates tables as I expect:

Animal
------
Id

Cat
----
AnimalId : FK to Animal (named FK3500ABA0D)
IsDomestic

As noted, the FK gets generated by the db and ends up as FK3500ABA0D. All I want to do is set the name of that constraint, but I can't find how to do it via Fluent NHibernate (or actually even plain NHibernate, for that matter).

So, what am I missing?

like image 894
Andy Avatar asked Jun 21 '10 12:06

Andy


2 Answers

Fluent NH does allow this:

public class ReferenceConvention : IReferenceConvention{
     public void Apply(IManyToOneInstance instance) {
          instance.ForeignKey(string.Format("FK_{0}_{1}",
               instance.EntityType.Name,
               instance.Name));
     }
}

You'd also need to implement IHasManyConvention and IHasManyToManyConvention in the same way as above.

like image 121
zcrar70 Avatar answered Oct 17 '22 13:10

zcrar70


I don't know if FluentNH supports it, but the XML is simple:

<joined-subclass name="Cat">
  <key column="AnimalId" foreign-key="NameOfTheFK"/>
</joined-subclass>
like image 22
Diego Mijelshon Avatar answered Oct 17 '22 14:10

Diego Mijelshon