实体框架(两个对象之间的关系无法定义)

时间:2011-12-19 18:54:57

标签: c# frameworks entity foreign-key-relationship

我正在尝试在ASP .Net网页中执行以下代码:

  using (var wpe = new CL40215_wpnEntities())
                {
                int cid = Convert.ToInt32(cmbCity.SelectedItem.Value);
                int catid = Convert.ToInt32(cmbCategory.SelectedValue);

             Post p = new Post
             {
                 title = txtTitle.Text,
                 description = txtDescription.Text,
                 User = u,
                 City = wpe.Cities.First(c => c.id == cid),
                 initialprice = 0,
                 finalprice = 10,
                 Category = wpe.Categories.First(c => c.id == catid),
                 postdate = DateTime.Now,
                 closedate = DateTime.Now.AddDays(Convert.ToInt32(cmbDays.SelectedValue)),
                currentprice = 1
             };
                wpe.AddToPosts(p);
                wpe.SaveChanges();
 }

但是,我收到以下错误:

  

无法定义两个对象之间的关系,因为它们附加到不同的ObjectContext对象。

有谁知道为什么会发生这种情况,以及如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

尝试更改对象初始化以首先附加post对象,然后创建关系。

    var category = wpe.Categories.First(c => c.id == catid);
    var city = wpe.Cities.First(c => c.id == cid);
    var user = wpe.Users.First(newU => newU.Id == u.Id);
    Post p = new Post
    {
        title = txtTitle.Text,
        description = txtDescription.Text,
        initialprice = 0,
        finalprice = 10,
        postdate = DateTime.Now,
        closedate = DateTime.Now.AddDays(Convert.ToInt32(cmbDays.SelectedValue)),
        currentprice = 1
    };
    wpe.AddToPosts(p);
    p.City = city;
    p.Category = category;
    p.User = user;

    wpe.SaveChanges();

如果您正在使用持久性感知类,他们需要在创建关系之前了解彼此。这意味着您需要在构建对象之前分离子项,然后首先将它们附加到所有子项,或者如上所述,首先附加新项目。不确定你的addtoposts repo调用是做什么的,但如果你没有在对象有效之前运行保存更改,这应该可以工作。

编辑:道歉。我没有注意到添加的用户对象。您需要使用当前上下文重新加载用户,或者从之前的上下文中删除用户,并将其附加到当前上下文。

答案 1 :(得分:1)

其中一个可能的问题是u引用User。我不知道它来自何处,u确实可能来自不同的背景。