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;}
}
Intenté hacer esto en Entity Framework cuando recibí el error:
No se puede determinar el final principal de una asociación entre los tipos 'ConsoleApplication5.Boo' y 'ConsoleApplication5.Foo'. El final principal de esta asociación debe configurarse explícitamente utilizando la API fluida de relación o las anotaciones de datos.
He visto preguntas sobre StackOverflow con una solución para este error, pero quiero entender qué significa el término "fin principal".
c#
entity-framework
database-design
foreign-key-relationship
taher chhabrawala
fuente
fuente

Respuestas:
En una relación uno a uno, un extremo debe ser principal y el segundo extremo debe ser dependiente. El extremo principal es el que se insertará primero y que puede existir sin el dependiente. El final dependiente es el que debe insertarse después del principal porque tiene una clave foránea para el principal.
En el caso del marco de la entidad, FK en dependiente también debe ser su PK, por lo que en su caso debe usar:
O mapeo fluido
fuente
Fooes el director entonces?Booes dependiente, requiere aFooy obtiene la clave foránea.Fooes el principal y puede existir sin aBoo.También puede usar el
[Required]atributo de anotación de datos para resolver esto:Foose requiere paraBoo.fuente
Booque acaba de recuperar de la base de datos, a menos que primero active la carga diferida de laFoopropiedad. entityframework.codeplex.com/SourceControl/network/forks/…Boo Booser virtual entonces?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 PKno era factible tener.Por ejemplo,
Fooya tiene una relación de uno a muchosBar.Ahora, tuvimos que agregar otra relación uno a uno entre Foo y Bar.
Aquí se explica cómo especificar una relación uno a uno utilizando una API fluida:
Tenga en cuenta que si bien la adición
PrimaryBarIddebe 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.fuente
PrimaryBarIdpropiedad? Esto es ridículo para mí. Si agrego la propiedad y digo que es la clave externa, aparece un error. Pero si no tengo la propiedad, EF la creará de todos modos. ¿Cual es la diferencia?PrimayBarIdpropiedad en laFooentidad. Probablemente la misma solución que probaste. ¿Limitaciones en EF quizás?