【发布时间】: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