Свободное отображение Nhibernate имеет много - PullRequest
9 голосов
/ 18 марта 2012

В моем MSSQL у меня есть две таблицы, Property и Photo.

Чтобы сделать его более коротким, я напишу здесь только несколько полей.Таблица свойств

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

Таблица фотографий

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

Соотношение выглядит следующим образом:

FK_Property_Photo

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

Как вы можете себе представить, одно свойство можетесть одно или несколько изображений.Одно изображение может принадлежать одному или нескольким свойствам.

Я пробовал с таким отображением

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 Ответ

13 голосов
/ 18 марта 2012

Вы хотите использовать References и HasMany ассоциации. Вы уже используете HasMany, поэтому для получения другой ассоциации:

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();
 }
...