with the side one not many hasone framework foreign for determined dependent could child ef-code-first one-to-one

ef code first - the - Primer código de EF: relación opcional de 1 a 1



one to one ef 6 (1)

Quiero mapear una relación opcional de 1 a 1 en una base de datos existente con EF Code First.

Esquema simple:

User Username ContactID Contact ID Name

Obviamente ContactID se une a Contact.ID. El campo ContactID es anulable, por lo que la relación es opcional: 0 o 1, nunca muchos.

Entonces, ¿cómo especifico esta relación en EF Code First, con este esquema existente?

Esto es lo que he intentado hasta ahora:

public class User { [Key] public string Username { get; set; } public int? ContactID { get; set; } [ForeignKey("ContactID")] public virtual Contact Contact { get; set; } } public class Contact { [Key] public int ID { get; set; } public string Name { get; set; } public virtual User User { get; set; } } modelBuilder.Entity<User>().HasOptional<Contact>(u=> u.Contact) .WithOptionalDependent(c => c.User);

Obtengo la siguiente excepción:

System.Data.Edm.EdmAssociationEnd: : Multiplicity is not valid in Role ''User_Contact_Source'' in relationship ''User_Contact''. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be *.


Una solución sería;

public class User { [Key] public string Username { get; set; } public virtual Contact Contact { get; set; } } public class Contact { [Key] public int ID { get; set; } public string Name { get; set; } public virtual User User { get; set; } } modelBuilder.Entity<User>() .HasOptional<Contact>(u => u.Contact) .WithOptionalDependent(c => c.User).Map(p => p.MapKey("ContactID"));

Establece solo sus objetos de navegación en sus POCO y en su lugar utiliza una API fluida para asignar su clave a la columna correcta.