Как видно из названия, мой код выглядит следующим образом.
Team.cs
public class Team {
public int Id { get; set; }
public string Name { get; set; }
// other props
public virtual ICollection<TeamPlayer> TeamPlayers { get; set; }
}
Player.cs
public class Player {
public int Id { get; set; }
public string Name { get; set; }
// other props
public virtual ICollection<TeamPlayer> TeamPlayers { get; set; }
}
TeamPlayer.cs
public class TeamPlayer {
public int PlayerId { get; set; }
public Skater Player { get; set; }
public int TeamId { get; set; }
public Team Team { get; set; }
}
MainViewModel.cs
addTeam(){
var team = new Team {
Name = "a team";
TeamPlayers = new List<TeamPlayer> {
new TeamPlayer{
Player = player, // assume player object is not null
Team = team
}
}
}
this.addToDB(team);
}
addToDB(Team team) {
using(var ctx = DBContext()) {
ctx.Teams.Add(team);
ctx.SaveChanges();
}
}
DatabaseContext.cs (фрагменты)
public class CompetitionContext: DbContext {
// some code
protected override void OnModelCreating(ModelBuilder builder) {
builder.Entity<TeamPlayer>()
.HasKey(teamPlayer => new { teamPlayer.PlayerId, teamPlayer.TeamId });
}
public virtual DbSet<Team> Teams { get; set; }
public virtual DbSet<Player> Players { get; set; }
}
Если я создаю свой код, как указано выше, каждый раз, когда я сохраняю новую команду с более чем 1 Команда TeamPlayers в Списке показывает исключение
Исключение: «Microsoft.EntityFrameworkCore.DbUpdateException» в Microsoft.EntityFrameworkCore.dll
На основе приведенного примера в документация, команда и teamPlayers должны быть созданы
Здесь
Но, если я создаю объект внутри области применения, объект будет вставлен успешно и как ожидалось.
Мне интересно, почему положение инициализации объекта имеет значение независимо от того, находится он внутри или снаружи с помощью области видимости?