我试图在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对象上。
有没有人知道为什么会发生这种情况,以及如何解决这个问题?
发布于 2011-12-19 19:04:44
尝试更改您的对象初始化,以便首先附加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();如果您使用的是持久性感知类,则在创建关系之前,它们需要了解彼此。这意味着您需要在构建对象之前先分离这些子对象,然后先将它们全部附加到子对象中,或者,如前所述,先附加新的post。不确定您是addtoposts调用正在做什么,但是如果在对象有效之前不运行保存更改,那么这应该可以工作。
编辑:道歉。我没有注意到用户对象正在被添加。您需要用当前上下文重新加载用户,或者将用户从以前的上下文中分离出来,并将其附加到当前上下文中。
发布于 2011-12-19 19:06:44
其中一个可能的问题是u引用User。我不知道它是从哪里来的,而且u可能来自不同的上下文。
https://stackoverflow.com/questions/8566006
复制相似问题