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

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

Est-ce possible de la carte à un schéma comme celui-ci:Beaucoup à beaucoup 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`) 
) 

sans maintenir un IList de film à l'intérieur directeur de classe? Je suppose que ce que je veux vraiment, c'est juste un moyen de s'assurer qu'il n'y a pas de noms de réalisateurs dupliqués dans la table m_director, autoriser plusieurs directeurs d'un film et ne pas laisser la classe Director s'occuper des films qu'ils dirigent.

Serait-il préférable de simplement ajouter une liste de films qu'un réalisateur a réalisé? Comment puis-je empêcher le même film d'être ajouté deux fois ici?

+0

La question est source de confusion. Que vous choisissiez de maintenir une liste de films qu'un réalisateur a dirigée, c'est à vous de décider, selon que vous avez besoin de cette information dans votre programme. Et cela n'a aucune incidence sur la façon dont vous vous assurez qu'il n'y a pas de noms en double dans la table m_director. –

Répondre

0

Ce dont vous parlez est une partie importante de votre logique métier. Il devrait gérer les administrateurs, s'assurer qu'ils ne sont pas dupliqués et s'assurer que les films ne sont pas ajoutés deux fois. Cela n'a rien à voir avec NHibernate. C'est juste une vieille programmation d'application.

0

Je ne pense pas qu'il est possible de mapper votre scénario sans utiliser un IList de films dans votre classe Director ... Parce que dans beaucoup de mappage c'est comment la relation est définie des deux côtés ...

+0

Je ne comprends pas pourquoi vous dites cela. Vous pouvez mapper n'importe quelle relation many-to-many d'un côté et non de l'autre. –

+0

@ Stefan - pouvez-vous donner un exemple comment faire cela? – user623879

+0

@ user623879: prenez un exemple d'une relation plusieurs-à-plusieurs qui n'est pas bidirectionnelle. Par exemple. http://ayende.com/blog/4043/nhibernate-mapping-list –