Подтвердить что ты не робот

API EF Code First Fluent, определяющий свойство Foreign Key

У меня есть класс AgentBalance с ассоциацией с агентом, таким образом:

public class AgentBalance
{
    ...

    public int AgentId { get; set; }

    public virtual Agent Agent { get; set; }

}

AgentId определяется как FK для отношений агента по соглашению, но я хочу сделать его явным в классе Mapping, чтобы быть более безопасным в отношении будущих изменений. Если у агента была коллекция балансов, я знаю, как это сделать, например:

HasRequired(t => t.Agent).WithMany(a => a.Balances).HasForeignKey(t => t.AgentId);

Однако у агента нет коллекции балансов - я не хочу, чтобы эта ассоциация была обратимой. Но без .WithMany в сопоставлении я не получаю возможность указывать .HasForeignKey. Есть ли другой способ? (N.B. Я знаю, что я мог бы также сделать это с помощью атрибутов, но я хочу использовать свободное API-сопоставление).

4b9b3361

Ответ 1

Я считаю, что вы должны это сделать:

HasRequired(t => t.Agent).WithMany().HasForeignKey(t => t.AgentId)

Ответ 2

Я предпочитаю использовать Data Annotations для этих задач, а не Fluent API. Это намного более короткий конец, который легко понять. EF должен автоматически определять свойства, заканчивающиеся на "Id", но чтобы быть в безопасности, вы можете указать их явно:

using System.ComponentModel.DataAnnotations.Schema;
...
public int AgentId { get; set; }

[ForeignKey("AgentId")]
public virtual Agent Agent { get; set; }

Вам нужно будет указать их явно, если ваша поддержка FK не заканчивается "Id", например:

public int AgentCode { get; set; }

[ForeignKey("AgentCode")] // now this is needed if you'd like to have FK created
public virtual Agent Agent { get; set; }

Здесь вы можете найти более подробную информацию: https://msdn.microsoft.com/en-us/data/jj591583.aspx