Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Relacionamento um para um com chave primária diferente no EF 6.1 Code First


one-to-one relacionamento com a propriedade FK explícita (como seu PayGroup.SupervisorId ) não é suportado.

Portanto, remova essa propriedade do modelo:
public class PayGroup
{
    public int Id { get; set; }
    public virtual Employee Supervisor { get; set; }
}

e use o seguinte mapeamento fluente:
modelBuilder.Entity<PayGroup>()
    .HasRequired(e => e.Supervisor)
    .WithOptional()
    .Map(m => m.MapKey("SupervisorId"));

O WithOptional() call especifica duas coisas. Primeiro que não há propriedade de navegação inversa em Employee class, e segundo que o FK é opcional (Allow Nulls = true na mesa).

Se você decidir adicionar a propriedade de navegação inversa
public class Employee
{
    public string EmployeeId { get; set; }
    public string FullName { get; set; }
    public virtual PayGroup PayGroup { get; set; } // <=
}

altere para WithOptional(e => e.PayGroup) .

Se você quiser torná-lo obrigatório (Allow Nulls = false na tabela), então use o WithRequiredDependent correspondente sobrecarga (Dependente aqui significa que o Employee será o diretor e PayGroup será o dependente ).