Не указывайте столбец в тесте на стойкость - PullRequest
0 голосов
/ 25 января 2012

У меня есть отношение один-ко-многим, но в объектах моего домена я не хочу, чтобы это разделение было двунаправленным. Нет проблем с отображением: «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
...