Неправильно настраивается перевыбор между SportTeam
и Matches
.
Итак, вы говорите, что у сущности SportTeam
может быть много Matches
, тогда логично, что у сущности Matches
есть внешний ключ, который ссылается на сущность SportTeam
.
Но если вы посмотрите на вашу SportTeam
конфигурацию сущности, вы скажете, что в качестве первичного ключа она имеет составной ключ (SportId
, TeamId
).
Вы получаете эту ошибку:
Количество свойств в зависимых и основных ролях в
ограничение отношений должно быть идентичным.
Поскольку, если у вас есть составной ключ в качестве первичного ключа, то внешний ключ, который относится к первичному ключу SportTeam
, должен также иметь оба свойства, подразумеваемые в составном ключе.
Итак, чтобы решить эту проблему, ваша Matches
сущность должна выглядеть так:
public class Matches
{
public int Id { get; set; }
// these two properties below represent the foreign key that refers to SportTeam entity.
public int SportId { get; set; }
public int TeamId { get; set; }
public SportTeam SportTeam { get; set; };
}
В методе OnModelCreating
вы должны иметь следующую строку:
modelBuilder.Entity<SportTeam>()
.HasMany(st => st.Matches)
.WithRequired(matches => matches.SportTeam)
.HasForeignKey(m => new { m.SportId, m.TeamId }) // <-- the composite foreign keys.
.WillCascadeOnDelete(false);
Вместо:
modelBuilder.Entity<SportTeam>()
.HasMany(st => st.Matches)
.WithRequired(matches => matches.SportTeam)
.HasForeignKey(m => m.SportTeamId)
.WillCascadeOnDelete(false);
Примечание 1:
Я всегда избегаю использования составного внешнего ключа. Если в результате я получу такие вещи, как у вас, я просто добавлю свойство первичного ключа Id
в SportTeam
сущность и создадим пару свойств SportId
и TeamId
с уникальным ограничением в базе данных.
Примечание 2:
Я не знаю, используете ли вы такой код в своем реальном проекте, но, пожалуйста, используйте свойства и сделайте их публичными, если это необходимо.