【问题标题】:Using linq how do i remove multiple records from a cross reference table使用 linq 如何从交叉引用表中删除多条记录
【发布时间】:2009-11-06 19:23:13
【问题描述】:

我的数据库包含 4 个表:

TABLE TBLCARTITEM (CART_ID, ITEM_ID, PROMOTION_ID, many more cart item fields) 
TABLE XREFCARTITEMPROMOTION (CART_ID, ITEM_ID, PROMOTION_ID) 
TABLE TBLPROMOTION (PROMOTION_ID, PROMOTION_TYPE_ID, many more promotion fields)
TABLE TBLITEM (ITEM_ID, many more item fields)

XREFCARTIEMPROMOTION 表是一个交叉引用表,它在 TBLCARTITEM 和 TBLPROMOTION 之间创建多对多关系。 TBLITEM 与 TBLCARTITEM 和 XREFCARTITEMPROMOTION 相关。

我正在尝试使用 linq 从上面指定的 XREFCARTIEMPROMOTION 表中删除多条记录。现在我只能删除一条记录。

我的脚本如下所示:

        using (WSE webStoreContext = new WSE()){

        XREFCARTITEM dbItem = WebStoreDelegates.selectCartItems.Invoke(webStoreContext).ByItemID(itemId).ByCartID(cartId).ToList().SingleOrDefault();


    if (dbItem.TBLITEM.TBLPROMOTION != null)
    dbItem.TBLPROMOTION.Remove(WebStoreDelegates.selectPromotions.Invoke(webStoreContext).ByID(dbItem.TBLITEM.TBLPROMOTION.PROMOTION_ID).ToList().SingleOrDefault()); 
}

selectCartItems 委托:

public static Func<WSE, IQueryable<XREFCARTITEM>> selectCartItems =
        CompiledQuery.Compile<WSE, IQueryable<XREFCARTITEM>>(
            (cart) => from c in cart.XREFCARTITEM.Include("TBLITEM").Include("TBLPROMOTION")
                      select c);

selectPromotions 代表:

public static Func<WSE, IQueryable<TBLPROMOTION>> selectPromotions =
CompiledQuery.Compile<WSE, IQueryable<TBLPROMOTION>>(
    (cart) => from c in cart.TBLPROMOTION
              select c);

过滤 byItemID 和 byCartID 将带回此购物车中该商品的所有实例。 按 ID 过滤只会返回一个促销活动。

我的删除过程只是从 XREFCARTITEMPROMOTION 表中删除一条记录。此时我想从我的 dbitem 的 XREFCARTITEMPROMOTION 表中删除所有过滤的记录。

我尝试将实体键设置为 null,但这似乎没有什么不同。 dbItem.TBLITEM.TBLPROMOTIONReference.EntityKey = null;

我的问题是如何根据上面的代码从交叉引用表中删除多条记录?

提前致谢。

【问题讨论】:

  • 回答了我自己的问题:replace - if (dbItem.TBLITEM.TBLPPROMOTION != null) dbItem.TBLPPROMOTION.Remove(WebStoreDelegates.selectPromotions.Invoke(webStoreContext).ByID(dbItem.TBLITEM.TBLPROMOTION.PROMOTION_ID ).ToList().SingleOrDefault());与 - if (item.TBLPPROMOTION != null) { item.TBLPPROMOTION.Clear(); webStoreContext.SaveChanges();} 这将删除与该项目相关的所有多对多促销条目。
  • 将您的答案发布为答案并将其标记为正确。

标签: linq entity-framework linq-to-entities


【解决方案1】:

回答了我自己的问题:替换 -

if (dbItem.TBLITEM.TBLPROMOTION != null) {
    dbItem.TBLPROMOTION.Remove(WebStoreDelegates.selectPromotions
    .Invoke(webStoreContext).ByID(dbItem.TBLITEM.TBLPROMOTION.PROMOTION_ID)
    .ToList().SingleOrDefault()); 
}

与 -

if (item.TBLPROMOTION != null) { 
     item.TBLPROMOTION.Clear(); 
     webStoreContext.SaveChanges();
}

这将删除与该项目相关的所有多对多促销条目

【讨论】:

    猜你喜欢
    • 2018-04-18
    • 2019-08-19
    • 2014-12-26
    • 1970-01-01
    • 2012-03-13
    • 2021-06-13
    • 2016-05-04
    • 2013-01-30
    • 2010-12-27
    相关资源
    最近更新 更多