Ce n'principal à la fin d'une association en relation 1:1 dans le cadre de l'Entité
public class Foo
{
public string FooId{get;set;}
public Boo Boo{get;set;}
}
public class Boo
{
public string BooId{get;set;}
public Foo Foo{get;set;}
}
J'ai essayé de le faire dans le Cadre de l'Entité lorsque j'ai obtenu l'erreur:
Impossible de déterminer les principales d'une association entre les types de
'ConsoleApplication5.Boo " et " ConsoleApplication5.Foo'.
Le principal de cette association doit être explicitement configuré à l'aide de la
relation API fluent ou des annotations de données.
J'ai vu des questions sur StackOverflow avec une solution pour cette erreur, mais je veux comprendre ce que le terme "principal" signifie.
Vous devez vous connecter pour publier un commentaire.
Dans une relation à une extrémité doit être principal et la seconde extrémité doit être dépendante. Principal est celui qui sera inséré en premier et qui ne peut exister sans la variable dépendante. Dépendant de la fin est celui qui doit être inséré après le principal, car il a la clé étrangère au capital.
Dans le cas de l'entity framework FK en charge doit également être son PK donc, dans votre cas, vous devez utiliser:
Ou fluide cartographie
Foo
est le principal alors?Boo
est la personne à charge, nécessite unFoo
, et obtient la clé étrangère.Foo
est le principal et ne peut exister sans unBoo
.modelBuilder.Entity<Foo>().HasRequired(f => f.Boo).WithRequiredPrincipal(s => s.Foo);
Vous pouvez également utiliser le
[Obligatoire]
annotation de données d'attribut pour résoudre ce problème:Foo
est nécessaire pourBoo
.Boo
que vous venez extraites de la base de données, sauf si vous déclencher le lazy-load de laFoo
de la propriété. entityframework.codeplex.com/SourceControl/network/forks/...Boo Boo
être virtuel, alors?C'est en référence à @Ladislav Mrnka de réponse sur l'utilisation de l'api fluent pour la configuration de one-to-one relation.
Eu une situation où le fait d'avoir
FK of dependent must be it's PK
n'était pas possible.E. g.,
Foo
a déjà un-à-plusieurs relation avecBar
.Maintenant, nous avons dû ajouter un autre one-to-one relation entre les Foo et Bar.
Ici est de savoir comment spécifier une relation à l'aide api fluent:
Noter que lors de l'ajout
PrimaryBarId
doit être supprimé, comme nous le préciser par api fluent.Également noter que le nom de la méthode
[WithOptionalPrincipal()][1]
est un peu ironique. Dans ce cas, le Principal est Bar. WithOptionalDependent() description sur msdn rend plus clair..Map(x => x.MapKey("PrimaryBarId"));
PrimaryBarId
propriété? C'est ridicule pour moi. Si j'ajoute la propriété et dire que c'est la clé étrangère, j'obtiens une erreur. Mais si je n'ai pas la propriété, puis EF en créer un de toute façon. Quelle est la différence?PrimayBarId
propriété dansFoo
entité. Probablement la même solution que vous avez essayé. Les Limitations dans l'EF peut-être?