簡體   English   中英

WCF 數據服務和 Upserts

[英]WCF Data Services and Upserts

我有一個名為 Contract 的實體的 WCF 數據服務。

合約和報價之間存在多對多:( * ) 合約 <----> ( * ) 報價

我有一種方法可以添加/刪除合同和報價之間的鏈接。

有時我會得到一個 updateException ,因為當鏈接已經存在時,我試圖在合同和報價之間添加一個鏈接。

我想編寫一個查詢,僅當鏈接不存在時才添加鏈接,而無需查詢數據庫以獲取我的合同和報價之間的現有鏈接。

有沒有辦法使用表達式樹來做到這一點? 還是 Linq?

目前,我這樣做:

void ModifyContract(Contract ctr)
{
    var contractInDb = (from c in service.Contracts.Expand("Quotes")
                       where c.Id == ctr.Id).Single();

    foreach(q in ctr.Quotes)
    {
        if( ! contractInDb.Quotes.Contains(q))
         {
              service.AddLink(ctr,"Quotes", q);
         }
    }

    service.SaveChanges();
}

我自己問了一個類似的問題 Silverlight How to do a server-side Insert/Update (Upsert) from Silverlight RIA services

您要么需要檢查現有關系(然后取決於您的效率如何),要么您可以將 Upsert 功能放入存儲過程(例如 sp_UpsertQuote(contractId, quoteId) 並調用它而不是使用 SaveChanges ()。

如果您有 SQL Server 2008 R2 ,那么我建議您創建一個使用Merge的 SQL 服務器存儲過程。

如果您不這樣做,那么我仍然會編寫一個存儲過程來更新插入。

這樣做的好處是您不需要為了確定是否需要創建或更新而向數據庫發出多個請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM