3

我有一个名为 ProjectContext 的 DbContext,它有一个DbSet名为 Cart,我将值传递到:

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我使用的被调用的购物车有重复记录,所以我认为视图不是问题。

4

1 回答 1

0

您的Cart实体必须具有唯一的主键。CustomerID不是唯一的,并且 EF 总是采用它可以找到的第一个特定值的记录。所以我要介绍一个CartId领域。

于 2013-02-01T14:52:53.080 回答