我正在尝试在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对象。
有谁知道为什么会发生这种情况,以及如何解决这个问题?
答案 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
确实可能来自不同的背景。