Esto se refiere a la respuesta de @Ladislav Mrnka sobre el uso de una API fluida para configurar la relación uno a uno.
Tuve una situación donde tener FK of dependent must be it's PK
no era factible tener.
Por ejemplo, Foo
ya tiene una relación de uno a muchos 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;
}
Ahora, tuvimos que agregar otra relación uno a uno entre Foo y 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;
}
Aquí se explica cómo especificar una relación uno a uno utilizando una API fluida:
modelBuilder.Entity<Bar>()
.HasOptional(p => p.PrimaryBarOfFoo)
.WithOptionalPrincipal(o => o.PrimaryBar)
.Map(x => x.MapKey("PrimaryBarId"));
Tenga en cuenta que si bien la adición PrimaryBarId
debe eliminarse, ya que lo especificamos a través de una API fluida.
También tenga en cuenta que el nombre del método [WithOptionalPrincipal()][1]
es algo irónico. En este caso, el director es Bar. La descripción de WithOptionalDependent () en msdn lo hace más claro.