Ceci fait référence à la réponse de @Ladislav Mrnka sur l'utilisation d'une API fluide pour configurer la relation un-à-un.
Eu une situation où avoir FK of dependent must be it's PK n'était pas possible.
Par exemple, Foo déjà une relation un-à-plusieurs avec Bar.
public class Foo {
public Guid FooId;
public virtual ICollection<> Bars;
}
public class Bar {
//PK
public Guid BarId;
//FK to Foo
public Guid FooId;
public virtual Foo Foo;
}
Maintenant, nous devions ajouter une autre relation un à un entre Foo et Bar.
public class Foo {
public Guid FooId;
public Guid PrimaryBarId;// needs to be removed(from entity),as we specify it in fluent api
public virtual Bar PrimaryBar;
public virtual ICollection<> Bars;
}
public class Bar {
public Guid BarId;
public Guid FooId;
public virtual Foo PrimaryBarOfFoo;
public virtual Foo Foo;
}
Voici comment spécifier une relation un-à-un à l'aide d'une API fluide:
modelBuilder.Entity<Bar>()
.HasOptional(p => p.PrimaryBarOfFoo)
.WithOptionalPrincipal(o => o.PrimaryBar)
.Map(x => x.MapKey("PrimaryBarId"));
Notez que tout en ajoutant PrimaryBarIddoit être supprimé, comme nous le spécifions via une API fluide.
Notez également que le nom de la méthode [WithOptionalPrincipal()][1]est assez ironique. Dans ce cas, le principal est Bar. La description de WithOptionalDependent () sur msdn le rend plus clair.