使用linq如何从交叉引用表中删除多个记录

时间:2009-11-06 19:23:14

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

我的数据库包含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将在此购物车中带回此商品的所有实例。 过滤byID只会带回一个促销。

我的删除过程仅从XREFCARTITEMPROMOTION表中删除单个记录。我想在此时从我的dbitem的XREFCARTITEMPROMOTION表中删除所有过滤的记录。

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

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

回答了我自己的问题:replace - if(dbItem.TBLITEM.TBLPROMOTION!= null)dbItem.TBLPROMOTION.Remove(WebStoreDelegates.selectPromotions.Invoke(webStoreContext).ByID(dbItem.TBLITEM.TBLPROMOTION.PROMOTION_ID).ToList() .SingleOrDefault()); with - if(item.TBLPROMOTION!= null){item.TBLPROMOTION.Clear(); webStoreContext.SaveChanges();}这将删除与此项目相关的所有多对多促销条目