从WCF DataService Client获取单个记录的最佳实践

时间:2013-06-05 15:07:30

标签: c# wcf wcf-data-services odata wcf-data-services-client

我有DataService,其中T是EntityFramework DbContext类

我的客户端应用是带有服务参考的Windows窗体应用。

从服务中获取单个实体的最佳方法是什么?

此代码有效:

var uri = new Uri("http://localhost/ProductService.svc/");
var context = new ProductContext(uri);
var result = context.Products.Where(x => x.ProductId == 123).FirstOrDefault();

但是,它有效,因为产品存在。那是因为我可以通过执行

来看到结果
http://localhost/ProductService.svc/Products(123)
在浏览器中

。如果我想查询数据库中不存在的产品123456

http://localhost/ProductService.svc/Products(123456)

我看到错误的'找不到资源'产品'的资源

问题是,在客户端我得到一个异常,但我希望FirstOrDefault()为空。当然我可以使用一些异常处理,但我想知道我的方法是否正确或是否有更好的方法来获取单个对象。

1 个答案:

答案 0 :(得分:3)

更新:在https://stackoverflow.com/a/5987733/98491

找到解决方案

关键是设置

context.IgnoreResourceNotFoundException = true;

现在SingleOrDefault()FirstOrDefault()表现得像我预期的那样。但我仍然想知道这是否是正确的决定,因为在浏览器中

 http://localhost/ProductService.svc/Prodducts(1)

(注意拼写错误)抛出相同的ResourceNotFound异常