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には、顧客ごとに挿入する最初のデータ レコードが繰り返されることです。したがって、ビューでモデルを表示すると、各顧客の最初のレコードが、実際のレコードの数だけ繰り返されCustomerIDます。

デバッグ中に、カート内のレコードが実際には で繰り返されることがわかります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 は常に 1 つの特定の値を見つけることができる最初のレコードを取得します。というわけで、フィールドを紹介しCartIdます。

于 2013-02-01T14:52:53.080 に答える