EntityFramework ORM插入错误

时间:2012-11-16 13:17:14

标签: c# asp.net-mvc orm asp.net-mvc-4

抱歉,我是初学者。

我有两个类:链接在一起的用户和组(组类具有用户类型属性)

这是User.cs:

public class User
{
    [Key]
    public int userId { get; set; }

    [Required]
    [MaxLength(10)]
    [Display(Name="Firstname")]
    public string firstname { get; set; }

    [Required]
    [MaxLength(10)]
    [Display(Name = "Lastname")]
    public string lastname { get; set; }
}

这是Group.cs:

public class Group
{
    [Key]
    public int idGroup { get; set; }
    public string name { get; set; }
    public User owner { get; set; }
}

这是插入

private myContext db = new myContext();
[HttpPost]
    public ActionResult Create(Group group)
    {
        group.owner = (User)Session["user"];
        if (ModelState.IsValid)
        {
            db.Groups.Add(group);
            db.SaveChanges();
            return RedirectToAction("Index","Home");
        }

        return View(group);
    }
//Session["user"] contains an User type object (which is already in database)

问题是:当我添加一个新组时,它会自动将新用户插入数据库,而不是插入相应的组。

示例:我是“user1”(因此“user1”出现在User表中),我想创建“group1”组。 我将我的用户链接到Group类的“owner”属性。

group1将被插入到Group表中,但user1也将被插入到User表中..这将导致重复的内容

我不知道如何避免这种情况......

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

试试这个,假设Group可以有多个User

using (DbEntities ctx = new DbEntities())
{
    // Create new Group
    Group g = new Group() { name = "Some name", };

    //Create new User 1
    User u1 = new User() { firstname = "user 1", };

    //Create new User 2
    User u2 = new User() { firstname = "user 2", };

    // Add users to the Group
    g.owner.Add(u1);
    g.owner.Add(u2);

    //Updating the context
    ctx.AddToGroup(g);

    //Save to Database
    ctx.SaveChanges();
}

答案 1 :(得分:0)

您必须使用Attach将现有的User附加到DbContext个实例。这将阻止EF创建对象的副本。