2

对不起,我是初学者。

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

这是 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”存在于用户表中)并且我想创建“group1”组。我将我的用户与 Group 类的“所有者”属性链接起来。

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

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

任何帮助,将不胜感激。

4

2 回答 2

0

User必须DbContext使用Attach. 这将防止 EF 创建对象的副本。

于 2012-11-16T20:17:11.580 回答
0

试试这个,假设 aGroup可以有多个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();
}
于 2012-11-16T18:14:12.727 回答