2009-11-06 65 views
0

我的數據庫包含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;

我的問題是如何從給定的代碼上面的交叉引用表中刪除多個記錄?

在此先感謝。

+0

回答我自己的問題: 更換 - 如果(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

+0

將答案發布爲答案並將其標記爲正確。 – 2009-11-16 06:27:54

回答

1

回答我自己的問題:更換 - 如果(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();}這將刪除綁這個項目的所有多到許多推廣項目