Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Relazione uno a uno con chiave primaria diversa nel codice EF 6.1 prima

one-to-one relazione con la proprietà FK esplicita (come il tuo PayGroup.SupervisorId ) non è supportato.

Quindi rimuovi quella proprietà dal modello:

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

e usa la seguente mappatura fluente:

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

Il WithOptional() call specifica due cose. Innanzitutto che non esiste una proprietà di navigazione inversa in Employee class e secondo che l'FK è opzionale (Allow Nulls = true nella tabella).

Se decidi di aggiungere la proprietà di navigazione inversa

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

cambialo in WithOptional(e => e.PayGroup) .

Se vuoi renderlo obbligatorio (Allow Nulls = false nella tabella), quindi utilizzare il corrispondente WithRequiredDependent sovraccarico (Dipendente qui significa che il Employee sarà il preside e PayGroup sarà il dipendente ).