Fluent Nhibernate映射有许多

本文关键字:许多 映射 Nhibernate Fluent | 更新日期: 2023-09-27 18:28:07

在我的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_属性_照片

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

Fluent Nhibernate映射有许多

您想要利用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();
 }