我想创建一个使用实体框架6和SQL Ce数据库的代码第一种方法。当我与主客场球队以及一个赛季创建比赛时,球队会根据比赛进行更新,但赛季不会。实体框架代码首次级联关系
一季由许多团队和许多游戏组成。
球队打很多比赛也出现在许多联赛的季节。
比赛是联赛赛季的一部分,拥有主队和客队。
public class Season {
public int ID { get; private set; }
public ICollection<Team> Teams;
public ICollection<Game> Games;
}
public class Team {
public int ID { get; private set; }
public string Name {get;set;}
public ICollection<Game> Games;
public ICollection<Season> Seasons;
}
public class Game {
public int ID { get; private set; }
public Season Season;
public Team HomeTeam;
public Team AwayTeam;
}
public class SeasonConfiguration : EntityTypeConfiguration<Season> {
public SeasonConfiguration() {
HasKey(s => s.ID);
HasMany(g => g.Games).WithOptional(s => s.Season);
//I've read that this should work for a many-to-many relationship, but it doesn't seem to work here!
HasMany(t => t.Teams).WithMany(p => p.Seasons).Map(x =>
{
x.MapLeftKey("TeamID");
x.MapRightKey("SeasonID");
x.ToTable("SeasonTeams");
});
}
public class TeamConfiguration : EntityTypeConfiguration<Team> {
public TeamConfiguration() {
HasKey(t => t.ID);
HasMany(g => g.Games).WithOptional(t => t.AwayTeam).Map(m => m.MapKey("AwayTeamID"));
HasMany(g => g.Games).WithOptional(t => t.HomeTeam).Map(m => m.MapKey("HomeTeamID"));
}
public class GameConfiguration : EntityTypeConfiguration<Game> {
public GameConfiguration() {
HasKey(a => a.ID);
HasOptional(s => s.Season).WithMany(g => g.Games).Map(m => m.MapKey("SeasonID"));
HasOptional(t => t.HomeTeam).WithMany().Map(m => m.MapKey("HomeTeamID"));
HasOptional(t => t.AwayTeam).WithMany().Map(m => m.MapKey("AwayTeamID"));
}
}
当应用程序运行并且使用种子值创建数据库时,它会创建一个带有SeasonID和TeamID的SeasonTeams表。
当一个包括球队和赛季在内的球队加入比赛时,赛季球队表不会更新,因此,当我尝试从一个赛季中获得所有球队时,什么都不会返回。即。
下面的代码通常是我如何使用上述,但是,没有给出结果。如预期
Season season2016 = new Season("2016");
Game game = new Game {HomeTeam= "Leicester City", AwayTeam="Arsenal", Season=season2016};
context.SaveChanges();
Season season = GetSeason();
foreach(Team team in season.Teams) {
Console.WriteLine(team.Name);
}
Season.Games的其他查询,Team.Games & Team.Season工作。
我是第一次使用实体框架进行代码开发的新手,因此现在摸索了很多,上面的一些代码可能不是最优的。欢迎任何有关改进的建议,以及对我的问题的帮助。
理想情况下,我希望季节更新,当我添加一个参考赛季的游戏,但不知道如何实现这一点,请协助。
预先感谢您。
我刚才d EF不支持多对多关系。我怀疑这就是为什么我的代码不起作用。 – Craig
我有种解决了这个问题,在Game.Season Set属性中添加了一个检查,并且在Game.HomeTeam&Game.AwayTeam Set属性中检查了Season.Teams集合中是否存在团队并添加它,如果它没有“T。我不相信这是一个非常优雅的解决方案。 – Craig
多对多的关系是可能的EF代码第一=> modelBuilder.Entity() .HasMany (S => s.Contacts) .WithMany(C => c.Customers) .MAP (cs => {c .MapLeftKey(“CustomerId”); cs。MapRightKey( “使用ContactID”); cs.ToTable(“CustomersContacts”); }); –
Alegrowin