Почему Code First Entity Framework генерирует внешний ключ? - PullRequest
0 голосов
/ 12 мая 2011

Итак, у меня есть ...

public class User
{
   public int ManagerId { get; set; }
   public Manager Manager { get; set; }
}

public class Manager
{
   public User User { get; set; }
}

modelBuilder.Entity<User>()
.HasOptional(x => x.Manager)
.WithOptionalDependent(x => x.User);

Таким образом, у пользователя есть дополнительный менеджер, а у менеджера может быть или не быть пользователь. Это работает в том случае, если у диспетчера нет внешнего ключа для пользователя, но у пользователя есть обнуляемый внешний ключ для менеджера. Но он генерирует внешний ключ и рассматривает ManagerId как обычное свойство. Как мне это исправить?

Ура, Ян.

1 Ответ

1 голос
/ 12 мая 2011

Это отношение один к одному. Это работает, только если внешний ключ построен поверх первичного ключа. Вам нужно что-то вроде этого:

public class User
{
   [Key, ForeingKey("Manager")]
   public int Id { get; set; }
   public Manager Manager { get; set; }
}

public class Manager
{
   public int Id { get; set; }
   public User User { get; set; }
}

Если у менеджера есть пользователь, у пользователя должно быть то же значение PK, что и у менеджера. Вы не сможете определить такое отношение необязательно с обеих сторон, потому что это нарушит FK. В беглом отображении вы должны сделать что-то вроде:

modelBuilder.Entity<Manager>()
            .HasOptional(m => m.User)
            .WithRequired(u => u.Manager);
...