NHibernate Fluent cascade delete ne fonctionne pas

J'ai un téléphone simple répertoire app à l'aide de Fluent NHibernate 1.1. Dans l'application, une "Personne" objet a beaucoup de "Numéro de téléphone" des objets. J'essaie de supprimer une Personne et je veux les suppressions en cascade à PhoneNumbers. J'ai mis une convention de DefaultCascade.All() après la lecture de cette réponse. Cependant, la tentative de suppression de l'objet parent encore déclenche une exception--il semble que NHibernate est d'essayer de mettre à jour la table enfant pour définir l'ID parent à null au lieu de simplement supprimer l'enregistrement:

{"impossible de supprimer la collecte: [Personne.PhoneNumbers#473][SQL: mise à JOUR phone_numbers ENSEMBLE person_id = null OÙ person_id = @p0]"}

InnerException:

{"Impossible d'insérer la valeur NULL dans la colonne "person_id", table 'annuaire.dbo.phone_numbers'; la colonne n'autorise pas les valeurs null. Mise à JOUR échoue.\r\nle instruction a été arrêtée."}

Mon Couramment config est:

public static ISessionFactory CreateSessionFactory() {
    return Fluently.Configure()
        .Database(MsSqlConfiguration.MsSql2008
            .ConnectionString(ConfigurationManager.ConnectionStrings[ConfigurationManager.AppSettings["activeConnStr"]].ConnectionString))
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Person>()
                                        .Conventions.Add(DefaultCascade.All())
                    )
        .BuildSessionFactory();
}

La classe parente est:

public class Person {
    public Person() {
        PhoneNumbers = new List<PhoneNumber>();
        EmailAddresses = new List<string>();
    }

    public virtual int Id { get; private set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public virtual string Company { get; set; }
    public virtual IList<PhoneNumber> PhoneNumbers { get; set; }
    public virtual IList<string> EmailAddresses { get; set; }
}

L'enfant de la classe (Numéro de téléphone) est:

public class PhoneNumber {
    public virtual string Number { get; set; }
    public virtual PhoneNumberType NumberType { get; set; }
    public virtual Person Person { get; set; }
}

Mon code pour supprimer une personne est:

public static void DeletePerson(int id) {
    using (var session = Dalc.Instance.SessionFactory.OpenSession()) {
        using (var trans = session.BeginTransaction()) {
            session.Delete(session.Load<Person>(id));
            trans.Commit();
        }
    }
}

Ce que je fais mal?