2012-03-18 21 views
9

En mi MSSQL tengo dos tablas, Propiedad y Foto.Fluent Nhibernate mapping hasMany

Para hacerlo más corto escribiré aquí solo algunos campos. tabla Property

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

vector Photo

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

La relación es la siguiente:

FK_Property_Photo

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

Como se puede imaginar una propiedad puede tener una o muchas imágenes. Una imagen puede pertenecer a una o varias propiedades.

he intentado con este tipo de mapeo

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

Debe agregar la etiqueta 'fluent-nhibernate', plz. – dwerner

+0

¿En qué lado quieres que aparezca la asociación? Echaré un vistazo a los documentos fluidos, prefiero las asignaciones xml: S. – dwerner

+0

¿Cómo asocias varias fotos con una propiedad? ¿Hay alguna tabla de 'enlaces' que no hayas mencionado? –

Respuesta

12

Usted quiere hacer uso de References and HasMany asociaciones. Ya está utilizando HasMany, para obtener la otra asociación:

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

buen trabajo, gracias – BobRock

+0

De nada. Ahora puedo entender las asignaciones fluidas cuando los veo. :) – dwerner

Cuestiones relacionadas