1

Asp.net Mvc4 アプリケーションで問題が発生しました。

「ユーザー」テーブルと「投影可能」を設計しましたが、多対多の関係があります。

私のユーザーテーブル:

 public partial class User
{
    public User()
    {
        this.Role = new HashSet<Role>();
        this.Project = new HashSet<Project>();
    }

    public int Id { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }

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

そして私のプロジェクトテーブル:

public partial class Project
{
    public Project()
    {
        this.Thresholds = new HashSet<Thresholds>();
        this.User = new HashSet<User>();
        this.Testrelease = new HashSet<Testrelease>();
    }

    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Thresholds> Thresholds { get; set; }
    public virtual ICollection<User> User { get; set; }
    public virtual ICollection<Testrelease> Testrelease { get; set; }
}

私の Project-Controller で:

public ActionResult EditProject(int id = 0)
    {
        Project project = db.Project.Find(id);
        if (project == null)
        {
            return HttpNotFound();
        }
        List<CheckBoxListInfoInt> userCheck = new List<CheckBoxListInfoInt>();
        foreach (User U in db.User.ToList())
        {
            userCheck.Add(new CheckBoxListInfoInt
            {
                ValueInt = U.Id,
                DisplayText = U.Username,
                IsChecked = (project.User.Contains(U))
            });
        }
        ViewBag.P_usrCB = userCheck;
        ViewData["pid"] = id;
        return View(project);
    }

    //
    // POST: /KPI_Data/Edit/5

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult EditProject(Project project)
    {
        if (ModelState.IsValid)
        {
            db.Project.Attach(project);

            db.Entry(project).State = EntityState.Modified;

            if (project.User.Count > 0)
                project.User.Clear();


            List<string> usrlist = new List<string>();
            var ucb = Request.Form["P_usrCB"];
            if (ucb != null)
                foreach (string item in ucb.Split(','))
                {
                    int UserId = Convert.ToInt32(item);
                    User usr = db.User.Single(x => x.Id == UserId);
                    project.User.Add(usr);
                    usrlist.Add(usr.Username);
                }
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(project);
    }

エラーは次の場所で発生します。

デシベル。SaveChanges();

私のHttpPost ActionMethodで

エラー メッセージは次のとおりです。

リレーションシップの外部キー プロパティを公開しないエンティティの保存中にエラーが発生しました。1 つのエンティティを例外のソースとして識別できないため、EntityEntries プロパティは null を返します。保存中の例外の処理は、エンティティ タイプで外部キー プロパティを公開することで簡単に行うことができます。詳細については、InnerException を参照してください。

なぜこのエラーが発生するのですか? 解決策は何ですか?どうも

4

1 に答える 1