2012-10-20 2 views
3
public class Project 
{ 


    public virtual int ID { get; set; } 

    [Required] 
    public virtual String Title { get; set; } 


    public String Definition { get; set; } 
    public DateTime StartDate { get; set; } 


    [Required] 
    public int CreaterID { get; set; } 

    public virtual ICollection<Status> Status { get; set; } 
    public virtual ICollection<Task> Tasks { get; set; } 
    public virtual ICollection<User> Users { get; set; } 

    public Project() 
    { 
     Users = new HashSet<User>(); 
    } 


} 


public class User 
{ 
    public int ID { get; set; } 


    [DisplayName("Kullanıcı Adı")] 
    [Required] 
    [MinLength(5, ErrorMessage = "Kullanıcı Adı En Az 5 Karakter Olmalıdır")] 
    public string username { get; set; } 

    [DataType(DataType.Password)] 
    [DisplayName("Şifre")]   
    [Required] 
    [MinLength(3,ErrorMessage="Şifre En Az 3 Karakter Olmalıdır")] 
    public string password { get; set; } 

    [Required] 
    public String Name { get; set; } 

    [Required] 
    public String Surname { get; set; } 

    public int? CreaterID { get; set; } 
    public int level { get; set; } 

    public ICollection<Task> Tasks { get; set; } 
    public ICollection<Project> Projects { get; set; } 

    public User() 
    { 
     Projects = new HashSet<Project>(); 
    } 
} 


public class TaskDB : DbContext 
{ 
    public DbSet<Comment> Comments { get; set; } 
    public DbSet<Project> Projects { get; set; } 
    public DbSet<Situation> Situaitons { get; set; } 
    public DbSet<Task> Tasks { get; set; } 
    public DbSet<User> Users { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Project>(). 
      HasMany(c => c.Users). 
      WithMany(p => p.Projects). 
      Map(
      m => 
      { 
       m.MapLeftKey("ProjectId"); 
       m.MapRightKey("UserId"); 
       m.ToTable("ProjectUser"); 
      }); 
    } 

} 

Si j'ajoute projet, l'utilisateur actuel ajouté les utilisateurs du projet liste mais projet non ajouté la liste de l'utilisateur actuel projets Ceci est mon projet ajouter le codeEntité FrameWork many-to-many

[HttpPost] 
    public ActionResult Create(Project proje,Status status) 
    { 

     proje.StartDate = DateTime.Now; 
     proje.Status = new HashSet<Status>(); 
     var user = _db.Users.Single(r=> r.ID == UserRole.ID); 
     proje.Users.Add(user); 
     proje.Status.Add(status); 
     user.Projects.Add(proje); 


     if (ModelState.IsValid) 
     { 
      var projeler = _db.Projects; 
      projeler.Add(proje); 
      _db.SaveChanges(); 

      return RedirectToAction("Index"); 

     } 


      return View(proje); 

    } 

I Rechercher dans ce cause du problème que je n'ai pas trouvé, je veux savoir pourquoi framework ajouter l'utilisateur à la liste du projet mais pas ajouter le projet à la liste des utilisateurs

Répondre

0

Votre code pour ajouter le nouveau projet à la base de données semble correct et la relation est probablement stockée.

Mais peut-être vous ne chargez pas la liste Projects avec un User. Si vous appelez ...

var project = _db.Projects.Single(p => p.ID == 1); 
var users = project.Users; // lazy loading because Users is virtual 

... vous verrez les utilisateurs du projet parce qu'ils obtiennent chargé paresseusement puisque la propriété Project.Users est marqué comme virtual. Si vous faites la même chose avec un User ...

var user = _db.Users.Single(u => u.ID == 1); 
var projects = user.Projects; // no lazy loading because Projects is not virtual 

... les projets ne sont pas chargés parce que la propriété est User.Projects pas marqué comme virtual.

Soit marquer la propriété comme virtual et pour permettre le chargement paresseux pour la collecte User.Projects:

public virtual ICollection<Project> Projects { get; set; } 

Ou utiliser le chargement impatient:

var user = _db.Users.Include(u => u.Projects).Single(u => u.ID == 1);