エンティティフレームワーク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テーブルが作成されます。
チームとシーズンを含み、チームがゲームで更新されている間にSeasonTeamsテーブルが更新されず、その結果、シーズンからすべてのチームを取得しようとすると何も返されません。すなわち、
次のコードは、通常、上記の使用方法ですが、結果は表示されません。 Season.Gamesの
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);
}
他のクエリ、Team.Games & Team.Season作業は予想通り。
私はエンティティフレームワークで最初の開発を行うのが初めてです。そのため、現時点で多くの不安を抱えており、上記のコードのいくつかはおそらく最適ではありません。私の問題の支援に加え、改善のための提案は歓迎します。
シーズンを参照してゲームを追加すると理想的には、シーズンを更新したいと思いますが、これを達成する方法がわからない場合は、お手伝いください。
ありがとうございます。
私はちょうどdでは、多対多の関係はEFではサポートされていません。私はこれが私のコードが動作しない理由であると思われる。 – Craig
Game.Season SetプロパティとGame.HomeTeam&Game.AwayTeam Setプロパティのチェックを追加して、チームがSeason.Teamsコレクションに存在するかどうかをチェックして追加します't。私はこれが非常にエレガントな解決策であると確信していない。多くの関係EFコードで可能である第一=> modelBuilder.Entity() .HasMany (S => s.Contacts)に多く –
Craig
.WithMany(C => c.Customers) .MAP (cs => { cs.MapLeftKey( "CustomerId"); cs。MapRightKey( "ContactId"); cs.ToTable( "CustomersContacts"); }); – Alegrowin