努力使用实体框架将数据保存到ASP.NET MVC中的数据库

斯蒂尼斯87

我刚刚开始学习C#和ASP.NET MVC框架,并且正在尝试构建购物车功能。这是我认为的(添加到购物车方法)应该起作用,但不起作用。它将一个项目添加到购物车,但是每当我添加另一个项目时,上一个项目就消失了。有人知道为什么我的数据库保存不起作用吗?我是否以正确的方式使用上下文?

namespace e_commerse.Controllers
{
    public class ShoppingcartController : Controller
    {
            private ProductDBContext db = new ProductDBContext();

            [Authorize]
            public ActionResult addToCart(int ID)
            {
                Product product = db.Products.Find(ID);

                if (product == null)
                {
                    return HttpNotFound();
                }

                var userId =  User.Identity.GetUserId();

                IEnumerable<ShoppingCart> shoppingcarts = 
                    from cart in db.Shoppingcarts
                    where cart.userID == userId
                    select cart;

                if (!shoppingcarts.Any())
                {
                    var newShoppingcart = new ShoppingCart();
                    newShoppingcart.products = new List<Product>();
                    newShoppingcart.products.Add(product);
                    newShoppingcart.userID = userId;
                    db.Shoppingcarts.Add(newShoppingcart);
                    db.SaveChanges();
                    return View("Index", newShoppingcart);
                }

                var shoppingcart = shoppingcarts.First();

                if (shoppingcart.products == null)
                {
                    shoppingcart.products = new List<Product>();
                }

                shoppingcart.products.Add(product);
                shoppingcart.userID = userId;
                db.SaveChanges();

                return View("Index", shoppingcart);
            }

            protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    db.Dispose();
                }
                base.Dispose(disposing);
            }
        }

        public class ProductDBContext : DbContext
        {
            public DbSet<Product> Products { get; set; }
            public DbSet<ShoppingCart> Shoppingcarts { get; set; }
        }

        public class ShoppingCart
        {
            public int ID { get; set; }
            public String userID { get; set; }
            public List<Product> products { get; set; }
        }

        public class Product
        {
            public int ID { get; set; }
            public String title { get; set; }
            public String description { get; set; }
            public decimal price { get; set; }
            public String imagepath { get; set; }
            public Type type { get; set; }
        }
    }

非常感谢您的帮助,并请原谅我的noob代码!

py3r3str

当您ShoppingCart从数据库中获取数据时,它不会获取产品列表。您的条件始终为真:

if (shoppingcart.products == null) // is always true

因此ShoppingCart.products,始终为null,您会创建new List<Product>()一个产品并将其添加到其中。这就是为什么ShoppingCart.products列表中只有一种产品因为旧列表仅由一项替换为新列表。

您必须先加载先前保存的产品,然后才能添加新产品。您可以使用EF延迟加载在您的示例中,您可以向products属性添加virtual关键字,以在需要时从db将其加载:

...
public virtual List<Product> products { get; set; }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不使用ASP.NET MVC4中的实体框架的情况下从数据库检索图像

来自分类Dev

ASP.NET MVC 4数据库实体错误

来自分类Dev

使用ASP.NET MVC 4 + Entity Framework将图像保存到数据库

来自分类Dev

在ASP.NET MVC 5中使用视图模型或数据库模型

来自分类Dev

子类未保存在ASP.Net MVC身份模型中的数据库中

来自分类Dev

将JSON数据对象存储到ASP.NET MVC(实体框架)中的数据库

来自分类Dev

在ASP.NET MVC 5中将图像添加到数据库

来自分类Dev

如何使用实体框架将二进制图像从数据库加载到asp.net中的imagebox.imageurl(NO MVC)

来自分类Dev

在ASP.NET MVC的“布局”页面中从数据库获取数据

来自分类Dev

如何使用ASP.NET Core将图像保存到数据库中的其他文件夹?

来自分类Dev

如何从ASP.NET WebAPI MVC中的多个数据库获取数据

来自分类Dev

使用实体框架和SQL Server数据库无法访问ASP.NET MVC Web应用程序中的数据

来自分类Dev

如何使用ASP.NET MVC将使用GrapeJS汇编的页面保存到数据库

来自分类Dev

将SQL Server连接到ASP.NET MVC中的Azure数据库

来自分类Dev

将SQL Server连接到ASP.NET MVC中的Azure数据库

来自分类Dev

如何在不使用ASP.NET MVC4中的实体框架的情况下从数据库检索图像

来自分类Dev

将JSON数据对象存储到ASP.NET MVC(实体框架)中的数据库

来自分类Dev

如何使用实体框架将二进制图像从数据库加载到asp.net(NO MVC)中的imagebox.imageurl

来自分类Dev

ASP.NET MVC将列表<T>保存到数据库

来自分类Dev

在ASP.Net MVC中管理数据库连接

来自分类Dev

实体框架7将现有数据库表转换为asp.net mvc中的代码第一类6

来自分类Dev

使用ASP.NET MVC将图像存储在数据库中

来自分类Dev

选择下拉列表并保存到数据库asp.net mvc

来自分类Dev

没有实体框架数据库连接的ASP.NET MVC

来自分类Dev

在asp.net mvc中从数据库中选择多个实体

来自分类Dev

在asp net core实体框架mvc中从数据库绑定菜单和子菜单

来自分类Dev

在 .net MVC 中显示多个数据库查询

来自分类Dev

如何使用asp.net mvc检查数据库中是否存在重复数据

来自分类Dev

如何使用 ASP.NET MVC 剃刀中的实体框架检查数据库中是否存在记录?

Related 相关文章

  1. 1

    如何在不使用ASP.NET MVC4中的实体框架的情况下从数据库检索图像

  2. 2

    ASP.NET MVC 4数据库实体错误

  3. 3

    使用ASP.NET MVC 4 + Entity Framework将图像保存到数据库

  4. 4

    在ASP.NET MVC 5中使用视图模型或数据库模型

  5. 5

    子类未保存在ASP.Net MVC身份模型中的数据库中

  6. 6

    将JSON数据对象存储到ASP.NET MVC(实体框架)中的数据库

  7. 7

    在ASP.NET MVC 5中将图像添加到数据库

  8. 8

    如何使用实体框架将二进制图像从数据库加载到asp.net中的imagebox.imageurl(NO MVC)

  9. 9

    在ASP.NET MVC的“布局”页面中从数据库获取数据

  10. 10

    如何使用ASP.NET Core将图像保存到数据库中的其他文件夹?

  11. 11

    如何从ASP.NET WebAPI MVC中的多个数据库获取数据

  12. 12

    使用实体框架和SQL Server数据库无法访问ASP.NET MVC Web应用程序中的数据

  13. 13

    如何使用ASP.NET MVC将使用GrapeJS汇编的页面保存到数据库

  14. 14

    将SQL Server连接到ASP.NET MVC中的Azure数据库

  15. 15

    将SQL Server连接到ASP.NET MVC中的Azure数据库

  16. 16

    如何在不使用ASP.NET MVC4中的实体框架的情况下从数据库检索图像

  17. 17

    将JSON数据对象存储到ASP.NET MVC(实体框架)中的数据库

  18. 18

    如何使用实体框架将二进制图像从数据库加载到asp.net(NO MVC)中的imagebox.imageurl

  19. 19

    ASP.NET MVC将列表<T>保存到数据库

  20. 20

    在ASP.Net MVC中管理数据库连接

  21. 21

    实体框架7将现有数据库表转换为asp.net mvc中的代码第一类6

  22. 22

    使用ASP.NET MVC将图像存储在数据库中

  23. 23

    选择下拉列表并保存到数据库asp.net mvc

  24. 24

    没有实体框架数据库连接的ASP.NET MVC

  25. 25

    在asp.net mvc中从数据库中选择多个实体

  26. 26

    在asp net core实体框架mvc中从数据库绑定菜单和子菜单

  27. 27

    在 .net MVC 中显示多个数据库查询

  28. 28

    如何使用asp.net mvc检查数据库中是否存在重复数据

  29. 29

    如何使用 ASP.NET MVC 剃刀中的实体框架检查数据库中是否存在记录?

热门标签

归档