0

我正在尝试使用 ASP.NET MVC 4 构建一个 Web 应用程序,但我已经被困了一段时间,并且在其他帖子中没有发现任何帮助:

我有两个模型类:用户和组。用户可以在任意数量的组中,并且一个组有一个用户列表(成员)。当用户创建一个组时,他将成为该组的所有者。

我的问题是,每当我尝试创建一个新组(并将当前用户添加到这个新组的成员列表中)时,以前的组似乎被修改了,因为当前用户不再是他的成员以前创建的组。

我希望我已经足够理解了,如果我不理解,我很抱歉(英语不是我的母语)。

以下是与我的问题相关的模型类: UserProfile 类:

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual List<Group> Groups { get; set; }
    public virtual List<Group> OwnedGroups { get; set; }
}

班级组:

public class Group
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int GroupId { get; set; }

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

    public string Description { get; set; }

    public virtual List<UserProfile> Members { get; set; }

    public virtual UserProfile Owner { get; set; }

}

我的方法用于创建一个新组(在 GroupController 中):

[HttpPost]
    public ActionResult Create(Group group)
    {
        if (ModelState.IsValid)
        {
            UserProfile user = db.UserProfiles.Where(u => u.UserName == User.Identity.Name).FirstOrDefault();
            db.Groups.Add(group);
            db.SaveChanges();
            group.Owner = user;
            user.OwnedGroups.Add(group);
            user.Groups.Add(group);
            group.Members = new List<UserProfile>();
            group.Members.Add(user); 
            db.SaveChanges();

            return RedirectToAction("SearchUsersToAddToGroup", new { groupId = group.GroupId });
        }

我究竟做错了什么 ?

4

1 回答 1

0

我在这里找不到任何明显的错误 - 但我会尝试删除一些冗余代码并将用户从更改FirstOrDefault()SingleOrDefault()以确保您的数据库中确实只有唯一用户(您的密钥是UserId但您获得了用户名)。

和之间是多对多的关系GroupUser所以你只需要从一端来维持这种关系,而不是两者……

[HttpPost]
public ActionResult Create(Group group)
{
    if (ModelState.IsValid)
    {
        // SingleOrDefault as you're not searching on the PK
        UserProfile user = db.UserProfiles.Where(u => u.UserName == User.Identity.Name).SingleOrDefault();

        group.Owner = user;
        db.Groups.Add(group);

        user.Groups.Add(group);
        user.OwnedGroups.Add(group);

        db.SaveChanges();

        return RedirectToAction("SearchUsersToAddToGroup", new { groupId = group.GroupId });
    }

这可能无法解决您的问题,但使用较少的代码可能更容易找到。

于 2013-01-19T13:08:14.100 回答