2013-06-03 4 views
1

У меня есть класс C# Team.cs. Когда я создаю команду, я заполнить список событий, делая это:Список для каждого нового экземпляра класса

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

Он отлично работает, если я создать только одну команду, но когда я создаю вторую команду, похоже, список событий первой команды снова пуст , кто-нибудь знает, почему это произошло?

Код команды, которую вы видите ниже.

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"); 
    } 

ответ

1

Вы не показывают код Event, но это выглядит, как вы моделируете команду к событию как один для многих, когда это должно быть много-ко-многим.

Если вы измените класс событий на следующий, он будет моделировать его как 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