Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Relation un à un avec une clé primaire différente dans EF 6.1 Code First

one-to-one relation avec la propriété FK explicite (comme votre PayGroup.SupervisorId ) n'est pas pris en charge.

Supprimez donc cette propriété du modèle :

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

et utilisez le mappage fluide suivant :

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

Le WithOptional() call spécifie deux choses. D'abord qu'il n'y a pas de propriété de navigation inverse dans Employee class, et deuxièmement que le FK est facultatif (Allow Nulls = true dans le tableau).

Si vous décidez d'ajouter une propriété de navigation inverse

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

changez-le en WithOptional(e => e.PayGroup) .

Si vous voulez le rendre obligatoire (Allow Nulls = false dans le tableau), puis utilisez le WithRequiredDependent correspondant surcharge (Dépendant signifie ici que le Employee sera le principal et PayGroup sera le dépendant ).