2012-03-18 7 views
9

Dans mon MSSQL j'ai deux tables, Property et Photo.Fluid Nhibernate mapping hasMany

Pour le rendre plus court, je vais écrire ici quelques champs. Table propriété

Id int not null 
Title nvarchar(255) not null 
PhotoId int not null 

table Photo

Id int not null 
ImageData varbinary(MAX) null 
ImageMimeType varchar(50) null 

relation est la suivante:

FK_Property_Photo

Primary Key table  Foreign key table 
-------------------------------------------- 
Photo     Property 
-------------------------------------------- 
Id      PhotoId 

Comme vous pouvez l'imaginer une propriété peut avoir une ou plusieurs images. Une image peut appartenir à une ou plusieurs propriétés.

I Tried avec ce genre de cartographie

public PropertyMap() 
{ 
    Table("Property"); 
    Id(x => x.Id).GeneratedBy.Identity(); 
    Map(x => x.Title).Length(255).Not.Nullable(); 
    HasMany(x => x.Photos).KeyColumn("Id"); 
} 

public PhotoMap() 
{ 
    Table("Photo"); 
    Id(x => x.Id).GeneratedBy.Identity(); 
    Map(x => x.Version); 
    Map(x => x.ImageData).CustomSqlType("VARBINARY(MAX)").Length(160000); 
    Map(x => x.ImageMimeType); 
} 
+1

Vous devez ajouter l'étiquette 'fluent-nhibernate', plz. – dwerner

+0

De quel côté voulez-vous que l'association apparaisse? Je jetterai un oeil sur les docs fluents, je préfère les mappings xml: S. – dwerner

+0

Comment associez-vous plusieurs photos à une même propriété? Y a-t-il une table 'lien' que vous n'avez pas mentionnée? –

Répondre

12

Vous voulez utiliser References and HasMany associations. Vous utilisez déjà HasMany, donc pour obtenir l'autre association:

public PropertyMap() 
{ 
    Table("Property"); 
    Id(x => x.Id).GeneratedBy.Identity(); 
    Map(x => x.Title).Length(255).Not.Nullable(); 
    HasMany(x => x.Photos).KeyColumn("Id"); // you were already doing this 
} 

public PhotoMap() 
{ 
    Table("Photo"); 
    Id(x => x.Id).GeneratedBy.Identity(); 
    Map(x => x.Version); 
    Map(x => x.ImageData).CustomSqlType("VARBINARY(MAX)").Length(160000); 
    Map(x => x.ImageMimeType); 
    References(x => x.Property) // you'll need 'Property' in your class definition too 
     .Column('PhotoId') 
     .Cascade.All(); 
} 
+0

bon travail, merci – BobRock

+0

De rien. Maintenant, je pourrais juste comprendre les cartographies fluides quand je les vois. :) – dwerner