Ваш класс Game
имеет два свойства навигации для класса Player
. EF не знает, какой из них сопоставить с целью Player.Games
. По этой причине он решает, что на самом деле существует три отношения:
Game.Players <-> not exposed
Game.Owner <-> not exposed
Player.Games <-> not exposed
И четвертое отношение -
Game.Characters <-> Character.Games
Для последнего EF обнаруживает правильные концы отношений, потому что они не являются двусмысленными.
Самый простой способ исправить это - дать EF подсказку, какое из двух навигационных свойств в Game
, ссылающееся на Player
, действительно принадлежит Player.Games
:
public class Game
{
public int id {get;set;}
[InverseProperty("Games")]
public virtual ICollection<Player> Players {get;set;}
public virtual Player Owner {get;set;}
public virtual ICollection<Character> Characters {get;set;}
}
Теперь результатом являются ожидаемые три отношения:
Game.Players <-> Player.Games
Game.Owner <-> not exposed
Game.Characters <-> Character.Games
Вместо использования атрибута [InverseProperty]
вы также можете указать это в Fluent API путем явного сопоставления отношения «многие ко многим» между Game.Players
и Player.Games
.