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

}

プロジェクトを追加すると、現在のユーザーがプロジェクト ユーザー リストに追加されましたが、プロジェクトは現在のユーザーのプロジェクト リストに追加されません これは私のプロジェクトの追加コードです

[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);

    }

見つからなかったこの問題の原因を検索します。エンティティ フレームワークがユーザーをプロジェクトのリストに追加するのにプロジェクトをユーザーのリストに追加しない理由を知りたい

4

1 に答える 1

0

新しいプロジェクトをデータベースに追加するコードは正しいように見え、関係が保存されている可能性があります。

Projectsただし、リストに。を付けてロードしない可能性がありますUser。電話したら...

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

...プロパティがとしてマークされているため、プロジェクトのユーザーが遅延ロードされるため、プロジェクトのユーザーが表示されます。あなたが同じことをするなら...Project.UsersvirtualUser

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

User.Projects...プロパティがとしてマークされていないため、プロジェクトはロードされませんvirtual

コレクションvirtualの遅延読み込みを有効にするには、プロパティにもマークを付けます。User.Projects

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

または、積極的な読み込みを使用します。

var user = _db.Users.Include(u => u.Projects).Single(u => u.ID == 1);
于 2012-10-20T15:48:41.740 に答える