我有一个名为ProjectContext的DbContext,它有一个名为Cart的DbSet
,我将值传递给:
public class ShoppingCart
{
ProjectContext _db = new ProjectContext();
public void AddToCart(Video toAdd, Customer CurUser)
{
var CartItem = new Cart
{
CustomerID = CurUser.CustomerID,
Item = toAdd.Title,
Count = 1,
Price = 1.00m
};
_db.Carts.Add(CartItem);
_db.SaveChanges();
}
}
public class Cart
{
[Key, Required, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int CustomerID { get; set; }
public string Item { get; set; }
public int Count { get; set; }
public decimal Price { get; set; }
}
基本上,客户可以拥有许多具有相同CustomerID
的不同购物车记录。实际数据库中的一切都很好,并添加了所有正确的记录。问题是,在实际的DbContext
中,我为每个客户插入的第一个数据记录会重复出现。因此,当我在我的View中查看模型时,每个客户的第一条记录只会重复,因为有许多实际记录存在CustomerID
。
我可以在调试时看到Cart中的记录确实在DbSet
中重复,尽管它们不在实际的数据库中。
我从来没有听说过这样的事情,也不知道问题是什么,所以任何帮助都会受到赞赏。提前谢谢。
当我在SQL Server中查询我的购物车表时,我看到了:
5 shutter island 2 1.00
5 billy madison 2 1.00
5 superbad 1 1.00
当我在视图中查看时,我看到了:
Item Count Price
shutter island 2 1.00
shutter island 2 1.00
shutter island 2 1.00
我将模型传递给视图的代码:
public ActionResult Index()
{
IEnumerable model =(from r in _cartdb.Carts
where r.CustomerID == WebSecurity.CurrentUserId
select r);
return View(model);
}
视图中的代码:
@model IEnumerable<MVCVideoProject.Models.Cart>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Item)
</td>
<td>
@Html.DisplayFor(modelItem => item.Count)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.ActionLink("Remove Item", "RemoveItem", new { custID = item.CustomerID, toRemove = item.Item })
</td>
</tr>
}
</table>
我可以在调试时看到我使用的DbSet
名为Carts的重复记录,所以我认为View不是问题所在。
答案 0 :(得分:0)
您的Cart
实体必须拥有唯一主键。 CustomerID
不是唯一的,EF只会始终获取它可以为一个特定值找到的第一条记录。所以我会介绍一个CartId
字段。