C# WCF数据服务和升级
我有一个名为Contract的实体的WCF数据服务 合同和报价之间存在多对多关系:(*)合同(*)报价 我有一个方法可以添加/删除合同和报价之间的链接 有时我会收到updateException,因为我试图在合同和报价之间添加链接,而链接已经存在 我想写一个只在链接不存在时添加链接的查询,而不需要查询数据库中我的合同和报价之间的现有链接 有没有一种使用表达式树的方法?还是林克 目前,我这样做:C# WCF数据服务和升级,c#,.net,wcf-data-services,C#,.net,Wcf Data Services,我有一个名为Contract的实体的WCF数据服务 合同和报价之间存在多对多关系:(*)合同(*)报价 我有一个方法可以添加/删除合同和报价之间的链接 有时我会收到updateException,因为我试图在合同和报价之间添加链接,而链接已经存在 我想写一个只在链接不存在时添加链接的查询,而不需要查询数据库中我的合同和报价之间的现有链接 有没有一种使用表达式树的方法?还是林克 目前,我这样做: void ModifyContract(Contract ctr) { var contrac
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,我自己也问了一个类似的问题
您要么需要检查现有的关系(然后取决于您的效率),要么可以将UpsertQuote功能放入存储过程(例如sp_UpsertQuote(construcd,quoteId)并调用它,而不是使用SaveChanges().如果您有SQL Server 2008R2,我建议您创建一个利用的SQL Server存储过程 如果您不这样做,那么我仍然会编写一个存储过程来upsert
这样做的好处是,您不需要向数据库发出多个请求来确定是否需要创建或更新。当您说链接已经存在时,您的意思是它已经存在于数据库或内存中?如果您是指数据库,客户端无法知道哪些链接在dat中abase不查询数据库…难道不可能编写一个表达式树来完成服务器端的所有处理吗?我会打开Sql profiler并查看生成的查询。我认为它会在同一个连接上发出两个请求。难道不可能编写一个表达式树来完成服务器端的所有处理吗一边