Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Eins-zu-Eins-Beziehung mit unterschiedlichem Primärschlüssel in EF 6.1 Code First

one-to-one Beziehung mit expliziter FK-Eigenschaft (wie Ihre PayGroup.SupervisorId ) wird nicht unterstützt.

Entfernen Sie also diese Eigenschaft aus dem Modell:

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

und verwenden Sie die folgende fließende Zuordnung:

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

Der WithOptional() call gibt zwei Dinge an. Erstens gibt es in Employee keine umgekehrte Navigationseigenschaft Klasse, und zweitens, dass der FK optional ist (Allow Nulls = true in der Tabelle).

Wenn Sie sich entscheiden, eine inverse Navigationseigenschaft hinzuzufügen

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

ändern Sie es in WithOptional(e => e.PayGroup) .

Wenn Sie es erforderlich machen möchten (Allow Nulls = false in der Tabelle), verwenden Sie dann das entsprechende WithRequiredDependent Überladung (Abhängig bedeutet hier, dass der Employee wird der Schulleiter sein und PayGroup wird der abhängige sein ).