我的数据库包含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;
我的问题是如何根据上面的代码从交叉引用表中删除多个记录?
提前致谢。
答案 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();}这将删除与此项目相关的所有多对多促销条目