WithOptionalDependent vs WithOptionalPrinciple - Réponse Définitive?

J'ai pensé qu'il pourrait être utile d'obtenir une réponse définitive sur l'utilisation WithOptionalDependent et quand utiliser WithOptionalPrincipal. L'aide pour les deux fonctions est un peu moins clair, et je me retrouve à creuser par le biais de multiples Débordement de la Pile des réponses et des réponses sur d'autres sites en combinant les réponses afin de se sentir confiant, j'ai eu la relation de couple dans la direction correcte.

Voici ce que MSDN dit à propos de WithOptionalDependent:

Configure la relation pour être en option:en option sans
propriété de navigation de l'autre côté de la relation. L'entité
type de configuration seront dépendantes et contenir une clé étrangère
pour le principal. Le type d'entité que la relation cibles
être le principal dans la relation.

et voici ce qu'il dit à propos de WithOptionalPrincipal:

Configure la relation pour être en option:en option sans
propriété de navigation de l'autre côté de la relation. L'entité
type de configuration sera le principal dans la relation. L'
le type d'entité que la relation cibles seront dépendantes et
contient une clé étrangère vers le principal.

La ligne "Le type d'entité en cours de configuration" est la partie qui toujours me confond (et je suppose que d'autres).

Dans cet exemple:

class MyEntityA
{
    [Key]
    public int Id { get; set; }
    public int BId { get; set; }
    [ForeignKey("BId")]
    public MyEntityB B { get; set; }
}

class MyEntityB
{
    [Key]
    public int Id { get; set; }
}

modelBuilder.Entity<MyEntityA>().HasOptional(a => a.B).WithOptionalDependent();

est "Le type d'entité en cours de configuration", se référant à MyEntityA ou MyEntityB? Je suppose que c'est l'ancien.

Si c'est correct, ce qui est un exemple de cas où vous l'auriez WithOptionalPrincipal?

En fait je pense que dans mon exemple de code, cela devrait vraiment être WithMany et ni de la WithOptional options. Clairement, je suis toujours confus!

Il y a des surcharges pour ces deux fonctions prennent la propriété de navigation dans l'autre direction. Je suppose que ces surcharges de ne pas modifier ces réponses, mais s'il vous plaît corrigez-moi si je me trompe.

J'espère que ce sera utile à la communauté en tant que bien.

InformationsquelleAutor Tim | 2014-05-08