Загрузка набора результатов SQL-запроса и сохранение его в сеансе в ASP.NET? - PullRequest
0 голосов
/ 08 апреля 2011

Я хочу иметь возможность использовать запрос

    select * from cart

и сохраните это в списке. В моем классе CartItem я определил атрибуты id, имени, количества и общей цены

Теперь я хочу сохранить его в сеансе, чтобы пользователь вошел в корзину. его предыдущие элементы корзины должны быть загружены с помощью SQL-запроса и сохранены в сеансе.

Сейчас у меня есть следующий код, но он не загружает предыдущую корзину покупателя из базы данных.

Ошибка, которую я делал, была загрузка корзины из базы данных sql каждый раз, когда клиент нажимал на корзину просмотра. Что не так. я должен держать это в сеансе.

public class ShoppingCart
{
    #region ListCart

    public static String cid;
    public List<CartItem> Items { get; private set; }
    public static SqlConnection conn = new SqlConnection(connStr.connString);
    #endregion

    #region CartSession


    public static readonly ShoppingCart Instance;

    static ShoppingCart()
    {

        if (HttpContext.Current.Session["ASPNETShoppingCart"] == null)
        {

            Instance = new ShoppingCart();
            Instance.Items = new List<CartItem>();

            HttpContext.Current.Session["ASPNETShoppingCart"] = Instance;

        }
        else
        {
            Instance = (ShoppingCart)HttpContext.Current.Session["ASPNETShoppingCart"];
        }
    }

Это мой класс корзины, в котором содержится товар, добавленный в корзину.

public class CartItem : IEquatable<CartItem>
{
    #region Attributes

    public int Quantity { get; set; }
    public static SqlConnection conn = new SqlConnection(connStr.connString);

    private int _productId;
    public int ProductId
    {
        get { return _productId; }
        set
        {
            _product = null;
            _productId = value;
        }
    }


    private Product _product = null;
    public Product Prod
    {
        get
        {
            if (_product == null)
            {
                _product = new Product(ProductId);
            }
            return _product;
        }
    }
    public string Name
    {
        get { return Prod.ProductName; }
    }

    public string Description
    {
        get { return Prod.Description; }
    }

    public float UnitPrice
    {
        get { return Prod.UnitPrice; }
    }

    public float TotalPrice
    {
        get { return UnitPrice * Quantity; }
    }

    #endregion

    #region Methods
    public CartItem(int productId)
    {
        this.ProductId = productId;
    }


    public bool Equals(CartItem item)
    {
        return item.ProductId == this.ProductId;
    }

    #endregion


}

1 Ответ

2 голосов
/ 08 апреля 2011

Я думаю, что могу догадаться, в чем проблема, разные пользователи почему-то используют одну и ту же корзину ...

public static readonly ShoppingCart Instance; 

Эта строка объявляет статический экземпляр класса ShoppingCart.В ASP.NET это означает, что данные передаются через приложение.Поскольку приложение работает на сервере и обслуживает более одного пользователя за раз, этот экземпляр является общим для всех пользователей.Если у вас есть два пользователя, после добавления элемента он будет добавлен в общую корзину, и каждый раз, когда появляется новый пользователь, корзина сбрасывается.

Таким образом, если у вас нет действительно статичных данных для всего приложения, не используйте статические данные в приложениях asp.net.

...