2012-03-18 25 views
9

W moim MSSQL mam dwie tabele, Property i Photo.Mapowanie Fluent Nhibernate ma wiele

Aby było krótsze, napiszę tutaj tylko kilka pól. tabeli Property

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

Photo stół

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

związku jest następująca:

FK_Property_Photo

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

Jak można sobie wyobrazić jedną właściwość może mieć jeden lub wiele obrazów. Jeden obraz może należeć do jednej lub wielu właściwości.

Próbowałem z tego rodzaju mapowania

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

Powinieneś dodać tag 'fluent-nhibernate', plz. – dwerner

+0

Po której ze stron chcesz umieścić powiązanie? Przyjrzę się płynnym dokumentom, wolę sam mapowanie XML: S. – dwerner

+0

Jak skojarzyć wiele zdjęć z jedną właściwością? Czy istnieje tabela "link", o której nie wspomniałeś? –

Odpowiedz

12

chcesz skorzystać z References and HasMany skojarzeń. Już używasz HasMany, więc aby uzyskać inne skojarzenie:

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

dobra robota, dziękuję – BobRock

+0

Nie ma za co. Teraz mogę po prostu zrozumieć płynne odwzorowania, kiedy je zobaczę. :) – dwerner

Powiązane problemy