1

私は2つのエンティティを持っています:

public class Tournament
{
    [Key]
    public Int32 Id { get; set; }
    public string Name { get; set; }

    public virtual TournamentSite Site { get; set; }
}

public class TournamentSite
{
    [Key]        
    public Int32 Id { get; set;}
    public string Name { get; set; }
}

そしてDbContextで:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        modelBuilder.Entity<Tournament>()
                    .HasRequired<TournamentSite>(t => t.Site)
                    .WithRequiredDependent()
                    .Map(p => p.MapKey("IdSite"));

        base.OnModelCreating(modelBuilder);
}

つまり、トーナメントをロードすると、適切な Id と Name を持つ TournamentSite が取得されます。問題は、特定のトーナメントの TournamentSite を変更したいということです。私はこのようなことを試しました:

var tournament = dbContext.Tournaments.Find(1); // Get tournament with id 1
tournament.Site.Id = 2;

dbContext.SaveChanges();

Tournament テーブルで IdSite フィールドが 1 ではなく 2 になることを期待していますが、Tournament を TournamentSite にリンクするために使用される IdSite フィールドは常に 1 です。

どんな助けでも大歓迎です、ありがとう。

4

3 に答える 3

1

もう 1 つのオプションは、実際に IdSite を Tournament オブジェクトにマップすることです。

public class Tournament
{
    [Key]
    public Int32 Id { get; set; }
    public string Name { get; set; }
    public Int32 TournamentSiteId { get; set;}
    public virtual TournamentSite Site { get; set; }
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        modelBuilder.Entity<Tournament>()
                    .HasRequired<TournamentSite>(t => t.Site)
                    .WithRequiredDependent()
                    .Map(p => p.MapKey("IdSite"));
        modelBuilder.Entity<Tournament>()
                    .Property(p => p.TournamentSiteId)
                    .HasColumnName("IdSite");
        base.OnModelCreating(modelBuilder);
}

今、あなたはこれを行うことができるはずです

var tournament = dbContext.Tournaments.Find(1); // Get tournament with id 1
tournament.TournamentSiteId = 2;

dbContext.SaveChanges();

出来上がり!

于 2012-11-12T18:57:31.517 に答える
0

私は最終的にそれを行うことができました.私はこのようにモデルをやり直しました:

public class Tournament
{
    [Key]
    public Int32 Id { get; set; }
    public string Name { get; set; }

    public Int32 IdSite { get; set; }

    [ForeignKey("IdSite")]
    public virtual TournamentSite Site { get; set; }
}

public class TournamentSite
{
    [Key]        
    public Int32 Id { get; set;}
    public string Name { get; set; }
}

関数を次のように作成する OnModel で何もする必要はありません。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     base.OnModelCreating(modelBuilder);
}

そして今、私は使用することができます:

var tournament = dbContext.Tournaments.Find(1);
tournament.IdSite = 2;

dbContext.SaveChanges();

手伝ってくれてありがとう。

于 2012-11-13T10:32:03.910 に答える
0

あなたのコードは、 のTournamentSiteではなく、IdSiteのID を変更しようとしていTournamentます。Site代わりにプロパティを割り当てる必要があります。

var tournament = dbContext.Tournaments.Find(1);
tournament.Site = dbContext.TournamentSites.Find(2);
dbContext.SaveChanges();
于 2012-11-12T18:40:58.367 に答える