【发布时间】:2015-05-21 09:53:15
【问题描述】:
当我尝试向数据库添加对象时,出现如下错误:
EntityFramework.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理 附加信息:一个实体对象不能被多个 IEntityChangeTracker 实例引用。
这是我的代码:
Order.cs
namespace OnlineMealOrdering.Models
{
public class Order
{
[Key]
public int Id { get; set; }
public virtual User User { get; set; }
public virtual Restaurant Restaurant { get; set; }
public int TotalPrice { get; set; }
public DateTime OrderTime { get; set; }
public string Address { get; set; }
public string UserTEL { get; set; }
public string RestaurantTEL { get; set; }
public string Memo { get; set; }
public virtual ICollection<OrderDetail> OrderDetails { get; set; }
}
}
OrderDetail.cs
namespace OnlineMealOrdering.Models
{
public class OrderDetail
{
[Key]
public int Id { get; set; }
public virtual Order Order { get; set; }
public Dish Dish { get; set; }
public int Price { get; set; }
public int Count { get; set; }
}
}
购物车.cs
public class Cart
{
public Dish Dish { get; set; }
public int Count { get; set; }
}
控制器
public class OrderController : Controller
{
private OnlineMealOrderingContext db = new OnlineMealOrderingContext();
List<Cart> Carts
{
get
{
if (Session["Carts"] == null)
{
Session["Carts"] = new List<Cart>();
}
return (Session["Carts"] as List<Cart>);
}
set { Session["Carts"] = value; }
}
[HttpPost]
public ActionResult Submit(string memo)
{
int user_id = (Session["Account"] as Account).Id;
var user = (from p in db.Users
where p.Id == user_id
select p).FirstOrDefault();
var restaurant = this.Carts.FirstOrDefault().Dish.Restaurant;
int total_price = 0;
foreach (var item in this.Carts)
{
total_price += item.Dish.Price * item.Count;
}
Order order = new Order
{
User = user,
Restaurant = restaurant,
TotalPrice = total_price,
OrderTime = DateTime.Now,
Address = user.Address,
UserTEL = user.TEL,
RestaurantTEL = restaurant.TEL,
Memo = memo,
OrderDetails = new List<OrderDetail>()
};
foreach (var item in this.Carts)
{
order.OrderDetails.Add(new OrderDetail() { Dish = item.Dish, Price = item.Dish.Price, Count = item.Count });
}
db.Orders.Add(order);
db.SaveChanges();
this.Carts.Clear();
return RedirectToAction("Index", "Home");
}
}
它发生在红色区域声明中。
【问题讨论】:
-
this.Carts 到底是什么?
-
@ErikFunkenbusch,我已经更新了问题。
标签: c# entity-framework asp.net-mvc-5