DBContext コレクションにオブジェクトを追加しています。コレクションに保存する前は、そのオブジェクト内の変数はすべて正しく、保存後、VS2012 のデバッグ ツールを使用して DBContext コレクション内を調べると、オブジェクト内のすべての値が変更されていることがわかります。関連するコードは次のとおりです。
public class AdmissionsStoreEntities : DbContext
{
public DbSet<Cart> Carts { get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<OrderDetail> OrderDetails { get; set; }
}
public void AddToCart(Product product)
{
// Get the matching cart and product instances
var cartItem = storeDB.Carts.SingleOrDefault(
c => c.CartId == ShoppingCartId
&& c.ProductId == product.ProductId);
if (cartItem == null)
{
// Create a new cart item if no cart item exists
cartItem = new Cart
{
ProductId = product.ProductId,
Product = product,
CartId = ShoppingCartId,
Count = 1,
DateCreated = DateTime.Now
};
// storeDB is my AdmissionsStoreEntities() object.
storeDB.Carts.Add(cartItem);
}
else
{
// If the item does exist in the cart, then add one to the quantity.
cartItem.Count++;
}
// Save Changes (where the changes occur)
storeDB.SaveChanges();
}
たとえば、cartItem オブジェクトを storeDB.Carts に保存する前の値は次のとおりです。
- 商品ID = 5
- レコード ID = 0
- カウント = 1
- Product.ProductID = 5
- Product.CategoryID = 5
変更を保存すると、cartItem の値が変更されます (メソッドに渡された元のオブジェクトの値も変更されていることに気付きました)。その後の値は次のとおりです
- 商品ID = 7
- レコード ID = 9
- カウント = 1
- Product.ProductID = 7
- Product.CategoryID = 7
なぜこうなった?必要に応じて、さらにコードを提供できます。
要求どおり、これが私の ShoppingCartId の取得方法です。
public ActionResult AddToCart(int id)
{
// Retrieve the product from our ViewData object that holds all current data in the SharePoint list
var addedProduct = ((List<Product>)ViewData["AllProducts"]).Find(x => x.ProductId == id);
// Get our cart instance.
var cart = ShoppingCart.GetCart(this.HttpContext);
// Add product to cart.
cart.AddToCart(addedProduct);
// Go back to the main store page for more shopping
return RedirectToAction("Index");
}
public static ShoppingCart GetCart(HttpContextBase context)
{
var cart = new ShoppingCart();
cart.ShoppingCartId = cart.GetCartId(context);
return cart;
}
public string GetCartId(HttpContextBase context)
{
if (context.Session[CartSessionKey] == null)
{
if (!string.IsNullOrWhiteSpace(context.User.Identity.Name))
{
context.Session[CartSessionKey] = context.User.Identity.Name;
}
else
{
Guid tempCartId = Guid.NewGuid();
context.Session[CartSessionKey] = tempCartId.ToString();
}
}
return context.Session[CartSessionKey].ToString();
}
私の Cart および ShoppingCart モデルへのリンクは、Rob の要求に従って、次のリンクにあります。
Rob が提供したデバッグ コードの結果: