DbContext中的数据DbSet与数据库不同

时间:2013-01-31 16:01:59

标签: asp.net-mvc entity-framework dbcontext

我有一个名为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不是问题所在。

1 个答案:

答案 0 :(得分:0)

您的Cart实体必须拥有唯一主键。 CustomerID不是唯一的,EF只会始终获取它可以为一个特定值找到的第一条记录。所以我会介绍一个CartId字段。