1

C# クラスの Team.cs があります。チームを作成するときは、次のようにしてイベント リストに入力します。

team.Events = db.Events.Where(sc => sc.SchoolcupEvent == true).ToList();

チームを 1 つだけ作成すると問題なく動作しますが、2 つ目のチームを作成すると、最初のチームのイベント リストが再び空のように見えます。

私の teamcreate のコードは以下にあります。

Team.cs:

public class Team {

[Key]
[Required(ErrorMessage = "A name is required")]
public string TeamId { get; set; }

[DisplayName("Photo")]
public string Photo { get; set; }
[Display(Name = "Logo")]
public string Logo { get; set; }


[Required(ErrorMessage = "A sports type is required")]
public string Sport { get; set; }

public int CoachId { get; set; }
[ForeignKey("CoachId")]
public virtual Coach Coach { get; set; }
public string SchoolId { get; set; }
[ForeignKey("SchoolId")]
public virtual School School { get; set; }

public double Score { get; set; }

public List<Event> Events { get; set; }


[Required(ErrorMessage="A gender category is required")]
public string Gender { get; set; }

}

チームの作成:

public ActionResult Create(Team team, IEnumerable<HttpPostedFileBase> files)
{
  Coach loggedCoach = new DBUserFinder().getLoggedCoach();
  team.CoachId = loggedCoach.CoachId;
  team.SchoolId = loggedCoach.SchoolId;
  team.Events = db.Events.Where(sc => sc.SchoolcupEvent == true).ToList();
  ViewBag.Type = new SelectList(db.Sports, "SportName", "SportName");
  if (ModelState.IsValid)
  {
    int i = 0;
    foreach (HttpPostedFileBase file in files)
    {
      if (file != null && file.ContentLength > 0)
      {
        string fileName = Path.GetFileName(file.FileName);
        var extention = Path.GetExtension(file.FileName);
        var allowedExtensions = new[] { ".png", ".jpg", ".jpeg" };
        if (allowedExtensions.Contains(extention))
        {
          fileName = team.TeamId.ToString();
          String fullPath = "";
          if (i == 0)
          {
            fullPath = fileName + " photo" + extention;
          }
          if (i == 1)
          {
            fullPath = fileName + " logo" + extention;
          }
          var path = Path.Combine(Server.MapPath("~/Content/Images/IO/Team"), fullPath);
          file.SaveAs(path);
          if (i == 0)
          {
            team.Photo = "../../Content/Images/IO/Team/" + team.TeamId + " photo" + extention;
          }
          if (i == 1)
          {
            team.Logo = "../../Content/Images/IO/Team/" + team.TeamId + " logo" + extention;
          }
        }
        i++;
      }
    }
    db.Teams.Add(team);
    db.SaveChanges();
    return RedirectToAction("Index");
  }
4

1 に答える 1

1

コードは表示されませんEventが、多対多である必要がある場合に、チームからイベントを1対多としてモデリングしているようです。

イベント クラスを次のように変更すると、M2M としてモデル化されます。

public class Event
{
    public int EventId { get; set; } 

    public string EventName { get; set; }
    // .....all your other properties

    public virtual ICollection<Team> Teams { get; set; }  // this along with the List<Event> property in Team will result in a M2M relationship
}

これにより、EventTeamsマッピング テーブルが作成されます。私の移行ファイルは次のようになります。

CreateTable(
    "dbo.EventTeams",
    c => new
        {
            Event_EventId = c.Int(nullable: false),
            Team_TeamId = c.String(nullable: false, maxLength: 128),
        })
    .PrimaryKey(t => new { t.Event_EventId, t.Team_TeamId })
    .ForeignKey("dbo.Events", t => t.Event_EventId, cascadeDelete: true)
    .ForeignKey("dbo.Teams", t => t.Team_TeamId, cascadeDelete: true)
    .Index(t => t.Event_EventId)
    .Index(t => t.Team_TeamId);

virtualまた、チーム モデルにポップ インして、遅延読み込みを可能にします。

public virtual List<Event> Events { get; set; }

HTH

于 2013-06-04T08:25:21.693 に答える