2011-08-05 96 views
0
public class Movie 
{ 
public int id; 
public string Title; 
public IList<Director> dirs; 
} 

public class Director 
{ 
public string Name; 
public DateTime birthday; 
} 

這可能映射到這樣一個模式:多對多NHibernate的

CREATE TABLE IF NOT EXISTS `movie` (
    `m_ID` varchar(9) NOT NULL 
    `Title` varchar(255) NOT NULL 
    PRIMARY KEY (`m_ID`), 
    KEY `m_ID` (`ReleaseDate`,`Title`,) 
) 
CREATE TABLE IF NOT EXISTS `m_director` (
    `dirID` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `dirName` varchar(40) NOT NULL, 
    `birthday` date 
    PRIMARY KEY (`dirID`), 
    UNIQUE KEY `dirName` (`dirName`) 
) 
CREATE TABLE IF NOT EXISTS `m_directs` (
    `m_ID` char(9) NOT NULL 
    `dirID` int(11) unsigned NOT NULL, 
    UNIQUE KEY `m_ID_2` (`m_ID`,`dirID`), 
    KEY `m_ID` (`m_ID`), 
    KEY `dirID` (`dirID`) 
) 

沒有保持電影的IList的一流導演裏面?我想我真正想要的只是一種確保m_director表中沒有重複的導演名稱的方法,允許電影的多個導演並且不讓Director類關心他們指定的電影。

只需添加Director導演的電影列表會更好嗎?如何阻止兩次添加同一部電影?

+0

問題很混亂。無論您選擇保留導演指示的電影列表,都取決於您是否需要該程序中的信息。而且它對於如何確保m_director表中沒有重複名稱沒有任何影響。 –

回答

0

你在說什麼是你業務邏輯的重要組成部分。它應該管理導演,確保它們不被複制,並確保電影不會被添加兩次。它與NHibernate沒有任何關係。這只是普通的舊應用程序編程。

0

我不這麼認爲在你的Director類中沒有使用IList的電影映射你的場景是可能的......因爲這在多對多的映射中這是兩邊如何定義關係......

+0

我不明白你爲什麼這麼說。您可以映射任何從一側到另一側的多對多關係。 –

+0

@ Stefan - 你能舉一個例子怎麼做? – user623879

+0

@ user623879:以任何非雙向的多對多關係爲例。例如。 http://ayende.com/blog/4043/nhibernate-mapping-list –