遇到了一些奇怪的情况,我试图在 Fluent nHibernate 中进行映射并且失败了。我有一个包含 Image 对象和 File 对象的 Asset 对象。Image 和 File 的 Id 相同,Image 对象包含一个 File 对象。出现这种情况是因为图像始终也是文件(这就是 Id 必须匹配的原因),但文件并不总是图像。
我已将其映射如下:
资产地图
Public Sub New()
Id(Function(x) x.Id)
Map(Function(x) x.DisplayOrder)
Map(Function(x) x.Text).Length(10000)
Map(Function(x) x.Title)
Map(Function(x) x.Width)
Map(Function(x) x.Height)
References(Function(x) x.Image).LazyLoad().Cascade.All()
References(Function(x) x.File).LazyLoad().Cascade.All()
References(Function(x) x.Row).Cascade().All()
Map(Function(x) x.AssetType).CustomType(Of AssetType)()
End Sub
图像映射
Public Sub New()
Id(Function(x) x.ID)
Map(Function(x) x.Height)
Map(Function(x) x.Width)
Map(Function(x) x.AltText)
Map(Function(x) x.ToolTip)
Map(Function(x) x.ImageStatus).CustomType(Of ImageStatus)()
References(Function(x) x.Product).Nullable()
HasOne(Function(x) x.File).Constrained()
References(Function(x) x.ViewTag)
HasManyToMany(Function(x As Image) x.ProductOptionValues).Table("ImageVsProductOptionValues").LazyLoad().Cascade.All()
HasManyToMany(Function(x As Image) x.MappedCategories).Table("CategoryVsImage").LazyLoad().Cascade.All().Inverse()
End Sub
文件映射
Public Sub New()
Id(Function(x) x.Id)
Map(Function(x) x.Data).LazyLoad().Length(Integer.MaxValue)
Map(Function(x) x.MimeType)
Map(Function(x) x.Size)
Map(Function(x) x.Filename)
Map(Function(x) x.LastDateModified)
Map(Function(x) x.DateCreated)
End Sub
我在尝试使用以下代码创建新图像并将其添加到资产并保存时遇到了麻烦。
If oAsset.Image Is Nothing Then
currentImage = New CMS.DataTransferObjects.Image
currentFile = New CMS.DataTransferObjects.File
Else
currentImage = oAsset.Image
currentFile = oAsset.File
End If
currentFile.Data = ms.ToArray
currentFile.MimeType = mimeType
currentFile.Filename = filImgUpload.FileName
currentFile.Size = filImgUpload.ContentLength
currentImage.Width = CInt(Utils.Convert.ToInt64(UploadedImage.PhysicalDimension.Width))
currentImage.Height = CInt(Utils.Convert.ToInt64(UploadedImage.PhysicalDimension.Height))
If oAsset.Image Is Nothing Then
oAsset.Image = currentImage
oAsset.File = currentFile
Else
'currentImage = oAsset.Image
'currentFile = oAsset.File
End If
然后我调用 nHibernate 管理器并尝试 .Update 资产,这会导致以下错误:
The INSERT statement conflicted with the FOREIGN KEY constraint "FK30EBACDFED57EBE9". The conflict occurred in database "BDM1_TestBed", table "dbo.File", column 'Id'.
任何人都可以帮助解决这个混乱 - 我认为我的映射是错误的,但我不知道如何改进它们?