繁体   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