sql >> Base de Datos >  >> RDS >> Sqlserver

Relación uno a uno con clave principal diferente en EF 6.1 Code First

one-to-one relación con la propiedad FK explícita (como su PayGroup.SupervisorId ) no es compatible.

Así que elimine esa propiedad del modelo:

public class PayGroup
{
    public int Id { get; set; }
    public virtual Employee Supervisor { get; set; }
}

y usa el siguiente mapeo fluido:

modelBuilder.Entity<PayGroup>()
    .HasRequired(e => e.Supervisor)
    .WithOptional()
    .Map(m => m.MapKey("SupervisorId"));

WithOptional() call especifica dos cosas. Primero que no hay una propiedad de navegación inversa en Employee class, y segundo que el FK es opcional (Allow Nulls = true en la tabla).

Si decide agregar la propiedad de navegación inversa

public class Employee
{
    public string EmployeeId { get; set; }
    public string FullName { get; set; }
    public virtual PayGroup PayGroup { get; set; } // <=
}

cámbielo a WithOptional(e => e.PayGroup) .

Si desea que sea obligatorio (Allow Nulls = false en la tabla), luego use el correspondiente WithRequiredDependent sobrecarga (Dependiente aquí significa que el Employee será el principal y PayGroup será el dependiente ).