Isso se refere à resposta de @Ladislav Mrnka sobre o uso de API fluente para configurar o relacionamento individual.
Teve uma situação em que ter FK of dependent must be it's PK
não era viável.
Por exemplo, Foo
já possui um relacionamento com muitos 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;
}
Agora, tivemos que adicionar outro relacionamento individual entre Foo e 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;
}
Aqui está como especificar o relacionamento individual usando a API fluente:
modelBuilder.Entity<Bar>()
.HasOptional(p => p.PrimaryBarOfFoo)
.WithOptionalPrincipal(o => o.PrimaryBar)
.Map(x => x.MapKey("PrimaryBarId"));
Observe que a adição PrimaryBarId
precisa ser removida, pois a especificamos por meio de API fluente.
Observe também que o nome do método [WithOptionalPrincipal()][1]
é meio irônico. Nesse caso, Principal é Bar. A descrição de WithOptionalDependent () no msdn torna mais clara.