我一直在努力研究如何完成我的任務,實際上我甚至不確定我要進入的方向確實是一個不好的方面我的SQL表 - 但它是我能夠想到的最簡潔的。NHibernate映射 - 如何實現這個
我的問題描述起來相當簡單。我有一個包含註釋的表,其中有一個外鍵用於我的用戶表(表示評論的作者)。爲了正確支持匿名用戶,我決定讓這個外鍵可以爲空 - 我還提供了3列用於指定姓名,電子郵件和網站,我希望在用戶匿名的情況下存儲相關信息 - 這些字段也是空。
因此,在短期
- 如果用戶登錄,外鍵將包含用戶名的ID,電子郵件地址和網站將爲空。
- 如果用戶未登錄,則外鍵將爲空,名稱,電子郵件和網站將包含有關用戶的數據。
在我的域模型中,我希望將其映射到User類(屬性Author,在我的評論類)。這個User類有一個名爲「IsAnonymous」的屬性 - 應該相應地設置它。
理想情況下,我會設置一些映射設置,根據外鍵的值映射此Author屬性並正確指定這些屬性。我已經有一個映射到我的用戶類映射到用戶表,但我不知道我會如何做到另一種方式。
我已經試過調查IUserType接口,但我不能完全理解我會如何在這個問題上不得不從2個不同的表中讀取。
有沒有一種合理的方式來做到這一點使用我當前的數據庫結構 - 或者我應該考慮切換我的佈局,如果是這樣,到什麼?
我從我的用戶表中有一個簡單的列切換指示一個匿名用戶,但是當名稱列設置爲唯一鍵時,這開始給我提出問題。我希望註冊用戶擁有唯一的名稱,但不是匿名用戶。
謝謝你的時間。
編輯:閱讀了這一點,決定也許一些ASCII /僞SQL圖會派上用場
User
-----
UserId Guid PRIMARY KEY
Name nvarchar(200) UNIQUE KEY NOT NULL
Email nvarchar(200) NOT NULL
Website nvarchar(200) NOT NULL
Comment
-------
CommentId Guid PRIMARY KEY
UserId GUID - FK-USER
Name nvarchar(200)
Email nvarchar(200)
Website nvarchar(200)
這可以工作!我目前正在研究一種方法,將我的評論類繼承到我的NHibernate特定用例中,並僅在我的NHibernate代碼中使用它。一旦我完成測試,看看它是否可以工作,我會返回。 – kastermester 2010-01-02 22:16:15
謝謝你,你的建議讓我以一種似乎有效的方式行事。在NH層中實現它有點代碼,但另一方面,它使得它可以在其他地方工作,並且以我頭腦中有意義的方式存儲在數據庫中:) – kastermester 2010-01-03 01:48:43