Можно ли использовать подсвойства навигации во внешних ключах с помощью API-интерфейса EF 4.1 Fluent?

Давайте использовать простой пример:

public class Employee
{
    public int EmployeeID { get; set; }
    public ICollection<Pay> Pays { get; set; }
}

public class Pay
{
    public Employee Employee { get; set; }
    public int Year { get; set; }
    public double Amount { get; set; }
}

Есть ли способ использовать свободный API для создания таблицы Pays с первичным ключом на Employee_EmployeeID, Year (с использованием соглашений о столбцах EF4.1)?

Я не хочу использовать аннотации данных, но я все равно пробовал это:

public class Pay
{
    [Key, Column(Order = 0)]
    public Employee Employee { get; set; }
    [Key, Column(Order = 1)]
    public int Year { get; set; }
    public double Amount { get; set; }
}

Все, что у меня получилось, это первичный ключ на Year и внешний ключ на Employee_EmployeeID.


person Sean Gough    schedule 20.05.2011    source источник


Ответы (1)


Это будет возможно только в том случае, если вы также добавите свойство FK в свой Pay:

public class Pay
{
    public int EmployeeId { get; set; }
    public Employee Employee { get; set; }
    public int Year { get; set; }
    public double Amount { get; set; }
}

Теперь вы можете отобразить его с помощью fluent-api:

modelBuilder.Entity<Pay>()
            .HasKey(p => new 
                {
                    p.EmployeeId,
                    p.Year
                });

Вам нужен FK сотрудника как собственность, если вы хотите сделать его частью PK.

person Ladislav Mrnka    schedule 20.05.2011