NHibernate Fluent Cascade Question - en Essayant D'Insérer la valeur NULL ID

J'ai les modèles suivants & mappages (extraits de code ci-dessous).

Un Concours a d'avoir plusieurs CompetitionAnswers associé (à choix multiples) dès le départ.

À l'heure actuelle, à l'aide de la fluidité de la mappages NHibernate indiqué ci-dessous, lorsque je crée une nouvelle marque de la Concurrence de l'objet, remplir les propriétés, puis créer 3 nouveaux CompetitionAnswer objets et les ajouter à la CompetitionAnswers propriété (propriété de la Concurrence), je m'attends à appeler la méthode Save sur la session qui vise à INSÉRER les 1 de la Concurrence de lignes et de 3 CompetitionAnswer lignes de la DB.

Cependant, dès que j'essaie d'appeler la méthode Save sur la session, il se plaint de ce que CompetitionId est nul et il ne peut pas insérer une valeur null dans la CompetitionAnswers table pour que le terrain qui est à droite, il ne devrait pas, cependant, je suppose que la NHibernate serait d'abord créer de la Compétition, alors utiliser la nouvelle valeur d'IDENTITÉ généré (CompetitionId) dans le CompetitionAnswers table?

De La Concurrence (Modèle)

public virtual int CompetitionId { get; private set; }
public virtual string Title { get; set; }
public virtual string Description { get; set; }
public virtual IList<CompetitionAnswer> CompetitionAnswers { get; set; }

CompetitionAnswer (Modèle)

public virtual int CompetitionAnswerId { get; set; }
public virtual string Answer { get; set; }
public virtual Competition Competition { get; set; }

CompetitionMap (NHibernate Fluent Cartographie)

public CompetitionMap()
{
    Id(x => x.CompetitionId)
        .GeneratedBy.Native();
    Map(x => x.Title);
    Map(x => x.Description);
    HasMany(x => x.CompetitionAnswers)
        .Cascade.AllDeleteOrphan()
        .KeyColumn("CompetitionId")
        .Inverse();
    Table("Competitions");
}

CompetitionAnswerMap (NHibernate Fluent Cartographie)

public CompetitionAnswerMap()
{
    Id(x => x.CompetitionAnswerId)
        .GeneratedBy.Native();
    Map(x => x.Answer);
    References(x => x.Competition)
        .Column("CompetitionId");
    Table("CompetitionAnswers");
}

Voici un exemple de code que j'ai utilisé pour tester ce scénario, qui génère l'erreur:

Competition c = new Competition();

c.Description = "Description";
c.Title = "Title";

CompetitionAnswer a1 = new CompetitionAnswer { Answer = "Answer 1" };
CompetitionAnswer a2 = new CompetitionAnswer { Answer = "Answer 2" };
CompetitionAnswer a3 = new CompetitionAnswer { Answer = "Answer 3" };

c.CompetitionAnswers.Add(a1);
c.CompetitionAnswers.Add(a2);
c.CompetitionAnswers.Add(a3);

session.Save(c);

L'erreur exacte que je reçois dès qu'il essaie de Sauver de l'est:

Impossible d'insérer la valeur NULL dans la
la colonne "CompetitionId", table
'CompetitionAnswers'; la colonne n'est pas
autoriser les valeurs null. INSERTION échoue. L'
la déclaration a été résilié.

Quelqu'un peut s'il vous plaît faire toute la lumière sur pourquoi ce n'est pas actuellement en train de travailler?

OriginalL'auteur marcusstarnes | 2011-03-08