我的數據庫包含4個表刪除多個記錄:使用LINQ我如何從一個交叉引用表
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;
我的問題是如何從給定的代碼上面的交叉引用表中刪除多個記錄?
在此先感謝。
回答我自己的問題: 更換 - 如果(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();} 這將刪除與此項目關聯的所有多對多促銷條目。 – 2009-11-09 15:14:07
將答案發布爲答案並將其標記爲正確。 – 2009-11-16 06:27:54