Имеет ли значение инициация объекта внутри или вне dbcontext с использованием синтаксиса в EF Core? - PullRequest
0 голосов
/ 30 марта 2020

Как видно из названия, мой код выглядит следующим образом.

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 должны быть созданы

Здесь

Но, если я создаю объект внутри области применения, объект будет вставлен успешно и как ожидалось.

Мне интересно, почему положение инициализации объекта имеет значение независимо от того, находится он внутри или снаружи с помощью области видимости?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...