我正在关注我已经在Part 8 of the tutoria l上的MusicStore教程。当我尝试添加ShoppingCart类时,我遇到了这个错误..我试图谷歌找到一个可能的解决方案,但未能找到一个干净的T_T ..基于我的研究我得到这个错误,因为我使用edmx这是首先是数据库,而不是代码中的代码。
我添加了此代码,并在Add()和Remove()
上出错namespace Project.Models
{
public partial class ShoppingCart
{
ProjectEntities db = new ProjectEntities();
string ShoppingCartId { get; set; }
public const string CartSessionKey = "cart_ID";
public static ShoppingCart GetCart(HttpContextBase context)
{
var cart = new ShoppingCart();
cart.ShoppingCartId = cart.GetCartId(context);
return cart;
}
// Helper method to simplify shopping cart calls
public static ShoppingCart GetCart(Controller controller)
{
return GetCart(controller.HttpContext);
}
public void AddToCart(Product product)
{
// Get the matching cart and album instances
var cartItem = db.Carts.SingleOrDefault(c => c.cart_ID == ShoppingCartId && c.product_ID == product.product_ID);
if (cartItem == null)
{
// Create a new cart item if no cart item exists
cartItem = new Cart
{
product_ID = product.product_ID,
cart_ID = ShoppingCartId,
Count = 1,
DateCreated = DateTime.Now
};
db.Carts.Add(cartItem);
}
else
{
// If the item does exist in the cart, then add one to the quantity
cartItem.Count++;
}
// Save changes
db.SaveChanges();
}
public int RemoveFromCart(int id)
{
// Get the cart
var cartItem = db.Carts.Single(cart => cart.cart_ID == ShoppingCartId && cart.record_ID == id);
int itemCount = 0;
if (cartItem != null)
{
if (cartItem.Count > 1)
{
cartItem.Count--;
itemCount = cartItem.Count;
}
else
{
db.Carts.Remove(cartItem);
}
// Save changes
db.SaveChanges();
}
return itemCount;
}
public void EmptyCart()
{
var cartItems = db.Carts.Where(cart => cart.cart_ID == ShoppingCartId);
foreach (var cartItem in cartItems)
{
db.Carts.Remove(cartItem);
}
// Save changes
db.SaveChanges();
}
public List<Cart> GetCartItems()
{
return db.Carts.Where(cart => cart.cart_ID == ShoppingCartId).ToList();
}
public int GetCount()
{
// Get the count of each item in the cart and sum them up
int? count = (from cartItems in db.Carts
where cartItems.cart_ID == ShoppingCartId
select (int?)cartItems.Count).Sum();
// Return 0 if all entries are null
return count ?? 0;
}
public decimal GetTotal()
{
// Multiply album price by count of that album to get
// the current price for each of those albums in the cart
// sum all album price totals to get the cart total
decimal? total = (from cartItems in db.Carts
where cartItems.cart_ID == ShoppingCartId
select (int?)cartItems.Count * cartItems.Product.Price).Sum();
return total ?? decimal.Zero;
}
public int CreateOrder(Order order)
{
decimal orderTotal = 0;
var cartItems = GetCartItems();
// Iterate over the items in the cart, adding the order details for each
foreach (var item in cartItems)
{
var orderDetail = new OrderDetail
{
product_ID = item.product_ID,
order_ID = order.order_ID,
UnitPrice = item.Product.Price,
Quantity = item.Count
};
// Set the order total of the shopping cart
orderTotal += (item.Count * item.Product.Price);
db.OrderDetails.Add(orderDetail);
}
// Set the order's total to the orderTotal count
order.Total = orderTotal;
// Save the order
db.SaveChanges();
// Empty the shopping cart
EmptyCart();
// Return the OrderId as the confirmation number
return order.order_ID;
}
// We're using HttpContextBase to allow access to cookies.
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
{
// Generate a new random GUID using System.Guid class
Guid tempCartId = Guid.NewGuid();
// Send tempCartId back to client as a cookie
context.Session[CartSessionKey] = tempCartId.ToString();
}
}
return context.Session[CartSessionKey].ToString();
}
// When a user has logged in, migrate their shopping cart to
// be associated with their username
public void MigrateCart(string userName)
{
var shoppingCart = db.Carts.Where(c => c.cart_ID == ShoppingCartId);
foreach (Cart item in shoppingCart)
{
item.cart_ID = userName;
}
db.SaveChanges();
}
}
}
我是MVC的首发,希望有人能帮我解决这个问题。
答案 0 :(得分:3)
好的,我做了什么让它工作..而不是使用.Add()我使用.AddObject()而不是使用.Remove我使用.DeleteObject()..我不知道这背后的原因事情工作,但至少它不再显示错误信息..:P感谢所有帮助过我的人.. :)
答案 1 :(得分:2)
添加和删除来自EntityFrame命名空间System.Data.Entity
所以我的猜测是使用System.Data.Entity ? 还检查项目中添加的引用EntityFramework.dll? 或者使用包管理器(nuget)在项目中添加EF? 您的上下文是否源自DBContext?如果不是没有添加。 如果您看到AddObject,则很可能是从ObjectContext派生而来
答案 2 :(得分:0)
试试这个。它将删除您的错误并且运作良好。
而不是使用DeleteObject
方法尝试这个
Employee emp = new Employee();
foreach (int id in employeeIdsToDelete)
{
emp = db.Employees.Find(id);
db.Employees.Remove(emp);
db.SaveChanges();
}
答案 3 :(得分:0)
public JsonResult getEmployeeByNo(string EmpNo)
{
using (SampleDBangularEntities dataContext = new SampleDBangularEntities())
{
int no = Convert.ToInt32(EmpNo);
var employeeList = dataContext.Employees.Find(no);
return Json(employeeList, JsonRequestBehavior.AllowGet);
}
}
冷不让查找失败