У меня есть отношение один-ко-многим, но в объектах моего домена я не хочу, чтобы это разделение было двунаправленным.
Нет проблем с отображением: «hasmany» с одной стороны и ничего (вместо «ссылок» с другой).
Но моя проблема связана с тестом на стойкость:
Я должен указать столбец "ссылки" стороны, и поэтому мне нужно свойство в классе
(конечно, столбец - в базе данных - не допускает пустых значений, но является внешним ключом).
Есть ли способ указать столбец в тесте на постоянство без свойства? (столбец базы данных, например,)
Классы, таблицы, сопоставления и тесты ниже. Большое спасибо!
Public Class Order
Public Overridable Property OrderId As Integer
Public Overridable Property OrderDate As Date
Public Overridable Property TotalOrderAmount As Long
Public Overridable Property OrderLines As IList(Of OrderLine)
End Class
Public Class OrderLine
Public Overridable Property OrderLineId As Integer
Public Overridable Property OrderLineAmount As Long
'I don't want to create property "OrderParent As Order" because I don't need it
End Class
TABLE [dbo].[tblOrders]
[OrderId] [int] NOT NULL,
[OrderDate] [datetime] NOT NULL,
[TotalOrderAmount] [bigint] NOT NULL,
CONSTRAINT [PK_tblOrders] PRIMARY KEY CLUSTERED
TABLE [dbo].[tblOrderLines](
[OrderLineId] [int] NOT NULL,
[OrderId] [int] NOT NULL,
[OrderLineAmount] [bigint] NOT NULL,
CONSTRAINT [PK_tblOrderLines] PRIMARY KEY CLUSTERED
Public Class OrderMap
Inherits ClassMap(Of Order)
Public Sub New()
Table("tblOrders")
Id(Function(x) x.OrderId).GeneratedBy.HiLo("1000")
Map(Function(x) x.OrderDate)
Map(Function(x) x.TotalOrderAmount)
HasMany(Function(x) x.OrderLines) _
.Inverse() _
.Cascade.All()
End Sub
End Class
Public Class OrderLineMap
Inherits ClassMap(Of OrderLine)
Public Sub New()
Table("tblOrderLines")
Id(Function(x) x.OrderLineId).GeneratedBy.HiLo("1000")
Map(Function(x) x.OrderLineAmount)
End Sub
End Class
Public Class OrderPersistenceTest
…
Dim ps As PersistenceSpecification(Of Order)
ps.CheckProperty(Function(x) x.OrderDate, Date.Today) _
.CheckProperty(Function(x) x.TotalOrderAmount, 1000000L) _
.VerifyTheMappings()
End Class
Public Class OrderLinePersistenceTest
'Fails because I don't specify value for foreign key OrderId
Dim ps As PersistenceSpecification(Of OrderLine)
ps.CheckProperty(Function(x) x.OrderLineAmount, 1000000L) _
.VerifyTheMappings()
End Class