2011-08-05 69 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 –