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