Как создать двойной внешний ключ Entity Framework CF - PullRequest
0 голосов
/ 04 ноября 2018

Я работаю с ASP.NET MVC и Entity Framework (сначала код).

У меня есть все таблицы сущностей, которые созданы по умолчанию, и я хочу создать Review таблицу

public Guid Id { get; set; }
public ApplicationUser User { get; set; }
[MaxLength(125)]
[ForeignKey("User"),Column(Order = 0)]
public string ReviewerId { get; set; }
public DateTime Date{ get; set; }
[Required]
[MaxLength(125)]
public string Title{ get; set; }
public string Comment{ get; set; }
[ForeignKey("User"), Column(Order = 1)]
[MaxLength(125)]
public string ReviewedId { get; set; }     // who we are reviewing

Однако, когда я пытаюсь добавить эту таблицу, используя add -igration, я получаю эту ошибку:

Количество свойств в зависимой и главной ролях в ограничении отношений должно быть одинаковым.

Как мне решить эту проблему? Моя идея состоит в том, что я хотел бы иметь возможность искать обзоры по ReviewedId или ReviewerId.

1 Ответ

0 голосов
/ 04 ноября 2018

Проблема в том, что у вас есть одно свойство навигации к пользовательской таблице:

public ApplicationUser User { get; set; }

но два свойства внешнего ключа, которые утверждают, что являются внешним ключом этого одного свойства навигации:

[ForeignKey("User"),Column(Order = 0)]
public string ReviewerId { get; set; }

[ForeignKey("User"), Column(Order = 1)]
public string ReviewedId { get; set; }

Это настоящая ошибка. EF срабатывает из-за непоследовательного количества свойств в определении внешнего ключа и упомянутого первичного ключа и поэтому не попадает в реальную проблему.

Исправление состоит в том, чтобы определить два свойства навигации для ApplicationUser, например:

[ForeignKey("Reviewer")]
public string ReviewerId { get; set; }
public ApplicationUser Reviewer{ get; set; }

[ForeignKey("ReviewedUser")]
public string ReviewedId { get; set; }
public ApplicationUser ReviewedUser{ get; set; }
...