我有一個User
表和一個Address
表。它們通過連接表連接。這種映射是直接的,但我有一些關於連接表的數據,我想在地址表中顯示。NHibernate使用加入表上的數據映射多對多
可能有更好的方法來設置這個,我願意提供建議。
這是表結構。
CREATE TABLE [dbo].[User]
(
[Id] INT NOT NULL IDENTITY PRIMARY KEY,
...
)
CREATE TABLE [dbo].[Address]
(
[Id] INT NOT NULL IDENTITY PRIMARY KEY,
...
)
CREATE TABLE [dbo].[AddressType]
(
[Id] INT NOT NULL IDENTITY PRIMARY KEY,
[Name] NVARCHAR(10) NOT NULL, -- Values: 'Shipping', 'Billing'
...
)
CREATE TABLE [dbo].[UserAddress]
(
[UserId] INT NOT NULL FOREIGN KEY REFERENCES [dbo].[User]([Id]),
[AddressId] INT NOT NULL FOREIGN KEY REFERENCES [dbo].[Address]([Id]),
[AddressTypeId] INT NOT NULL FOREIGN KEY REFERENCES [dbo].[AddressType]([Id]),
...
)
我想要的是在用戶對象上有一個運輸和賬單地址列表。我將如何映射?我使用Fluent NHibernate進行映射。
我最初開始了有兩個連接表,BillingAddress
和ShippingAddress
,那只是在User
和Address
表之間的聯接。這樣可以很好地工作,但是然後有兩張具有完全相同結構的表來做同樣的事情,但它看起來並不正確。
如果沒有辦法直接映射,並有投入地址對象的元數據,那麼也許有2協會桌子是要走的路。唯一的問題是,如果最終增加了更多AddressType,結果會怎樣。我不認爲這會發生在這種情況下,但可能會在另一種情況下發生。 – 2010-11-16 21:36:49
如果不可能添加更多的地址類型,那麼我會使用兩個表格來映射它,就像您原先所做的那樣。您以後可以隨時重構您的模式,並編寫遷移腳本將數據移動到新結構中。在我的最後一個項目中,我經常這樣做,因爲需求發生了變化(或者更好理解),這不是一個大問題。與任何你的里程可能會有所不同。 – 2010-11-17 00:11:29