Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检索EF数据和集合的更好方法_C#_Entity Framework_Linq To Sql - Fatal编程技术网

C# 检索EF数据和集合的更好方法

C# 检索EF数据和集合的更好方法,c#,entity-framework,linq-to-sql,C#,Entity Framework,Linq To Sql,因此,我有一个模型,其中包含一个包含项的模型列表,诸如此类: public partial class CART { public CART() { //this.CART_DETAIL = new HashSet<CART_DETAIL>(); this.CART_DETAIL = new List<CART_DETAIL>(); } public int CART_IDE { get; set; }

因此,我有一个模型,其中包含一个包含项的模型列表,诸如此类:

public partial class CART
{

    public CART()
    {
        //this.CART_DETAIL = new HashSet<CART_DETAIL>();
        this.CART_DETAIL = new List<CART_DETAIL>();
    }

    public int CART_IDE { get; set; }
    public int CART_COUNT { get; set; }
    public string SHOPPING_CART_IDE { get; set; }

    public virtual IList<CART_DETAIL> CART_DETAIL { get; set; }

}

public partial class CART_DETAIL
{
    public int CART_DETAIL_IDE { get; set; }
    public int CART_IDE { get; set; }
    public int CART_DETAIL_COUNT { get; set; }
    public Nullable<int> PACK_IDE { get; set; }
    public Nullable<int> BACKSTORE_INVENTORY_IDE { get; set; }

    public virtual CART CART { get; set; }
    public virtual PACK PACK { get; set; }
    public virtual BACKSTORE_INVENTORY BACKSTORE_INVENTORY { get; set; }
}

public partial class BACKSTORE_INVENTORY
{
    public BACKSTORE_INVENTORY()
    {
        this.CART_DETAIL = new HashSet<CART_DETAIL>();
        this.ORDER_DETAIL = new HashSet<ORDER_DETAIL>();
    }

    public int BACKSTORE_INVENTORY_IDE { get; set; }
    public int INVENT_IDE { get; set; }
    public int STORE_IDE { get; set; }
    public decimal BACKSTORE_INVENTORY_PRICE { get; set; }
    public int BACKSTORE_STOCK_QTY { get; set; }
    public decimal BACKSTORE_DISCOUNT { get; set; }
    public decimal BACKSTORE_SELLING_PRICE { get; set; }

    public virtual INVENTORY INVENTORY { get; set; }
    public virtual STORE STORE { get; set; }
    public virtual ICollection<CART_DETAIL> CART_DETAIL { get; set; }
    public virtual ICollection<ORDER_DETAIL> ORDER_DETAIL { get; set; }
}
CART cart =
                    db.CART.FirstOrDefault(_item => _item.SHOPPING_CART_IDE == mShoppingCartID && _item.CART_ACTIVE_INDICATOR);

if (cart != null)
{
    cart.CART_EXP_TIME = DateTime.Now.AddMinutes(90);

    cart.USER_SESSION_IDE = UserSessionManager.GetUserSession().mUserSessionID;

    cart.CART_DETAIL = cart.CART_DETAIL.ToList();

    foreach (var cartDetail in cart.CART_DETAIL)
    {
        if(cartDetail.BACKSTORE_INVENTORY_IDE != null)
        {
            cartDetail.BACKSTORE_INVENTORY =
                db.BACKSTORE_INVENTORY.First(_item => _item.BACKSTORE_INVENTORY_IDE == cartDetail.BACKSTORE_INVENTORY_IDE);

            cartDetail.BACKSTORE_INVENTORY.INVENTORY =
                db.INVENTORY.Find(cartDetail.BACKSTORE_INVENTORY.INVENT_IDE);

            cartDetail.BACKSTORE_INVENTORY.INVENTORY.CARD =
                db.CARD.Find(cartDetail.BACKSTORE_INVENTORY.INVENTORY.CARD_IDE);
        }
        else
        {
            cartDetail.PACK = db.PACK.First(_item => _item.PACK_IDE == cartDetail.PACK_IDE);
        }
    }

    db.SaveChanges();
}
我收到以下错误:
CS0021:无法将带[]的索引应用于“System.Collections.Generic.ICollection”类型的表达式
,我理解这是因为ICollection无法提供索引,然后我得到
ObjectContext实例已被释放,不能再用于需要连接的操作。
用于我忘记检索的项目


所以我的问题是:是什么让这一切发生的?是否有一种方法可以一次检索所有数据,而不必单独获取所有特定项?更好的方法是什么?

从上面的代码中,您想要实现什么

我正在努力追寻你的最终目标,但你是否会在这方面有所追求:

  public List<Cart> GetAllInCart()
  {
     return db.CART.Where(a => a.Cart_IDE == CartIDE)
                   .Include(x => x.Cart_Detail)
                   .Include(x => x.Cart_Detail.Pack)
                   .Include(x => x.Cart_Detail.Backstore_Inventory)
                   .ToList()
  }
public List GetAllInCart()
{
返回db.CART.Where(a=>a.CART\u IDE==CartIDE)
.包括(x=>x.Cart\u详细信息)
.包括(x=>x.Cart\u Detail.Pack)
.Include(x=>x.Cart\u Detail.Backstore\u库存)
托利斯先生()
}

我希望这有帮助:)

这有帮助,而不是同时。问题在于,我想知道,因为我正在使用entity framework,所有这些都是为了检索连接到我的购物车详细信息的所有数据,并在数据库连接关闭后保留这些数据,而不必先单独获取每个数据。尝试在linq查询之前关闭延迟加载。例如db.Configuration.LazyLoadingEnabled=false;这将返回所有数据,并且您应该能够删除includes:)好的,我该怎么做?我已经关闭了延迟加载,但是现在通过外键连接的集合和项目不会加载。在上面的例子中,
BACKSTORE\u INVENTORY
将为空。实际上,我刚刚讨论了同一个问题,我稍微误解了延迟加载和急切加载的工作原理。没有解决确切问题的办法。您如何使用存储库?如果您实现了一个存储库,这意味着您只需要指定一次包含,然后重新使用该方法:)希望有帮助,如果您找到了合适的解决方案,请告诉我。谢谢