RIA 域服务具有此方法...
public virtual CmsDealer GetCmsDealer(string id)
{
return this.Context.CmsDealerSet.FirstOrDefault(p => p.Id == id);
}
Wcf 服务有这个...
public CmsDealer GetDealer(string id)
{
return domainservice.GetCmsDealer(id);
}
当使用不存在的 Id 调用时,GetCmsDealer() 调用 barfs
无法将“System.Object[]”类型的对象转换为“RIAServicesLibrary.Web.Models.CmsDealer[]”类型。
我的印象是它只会返回一个空值,我可以稍后进行测试。然而不知何故,这并没有发生。我发现的所有示例都显示类似这样的工作正常。
任何有帮助的见解,我都对 EF、RIA 和 Wcf 感到有点困惑和新手。
更新:问题是我需要一直跟踪失败到 Wcf 以便最终调用 GetDealer 的应用程序可以发现没有解决方案。理想情况下,我需要这样做而不留下未捕获的异常:)
GetCmsDealer 中的 try/catch 解决方案将允许我检测到故障,但仍然无法在不伪造许多约束的情况下重新启动“空”CmsDealer 对象(似乎实体对此很挑剔)。
所以我也可以在 GetDealer 中尝试/捕获,但我仍然没有要返回的有效 CmsDealer 对象。
谢谢!
更新
对于那些想知道它是如何发挥作用的人来说,最后的程序看起来是这样的......
public virtual IQueryable<CmsDealer> GetCmsDealerSetOrEmpty(string id)
{
return this.Context.CmsDealerSet
.Include("CmsItemState")
.Where(p => p.Id == id)
;
}
Wcf 包装器现在恢复为简单的传递。在客户端我检查结果的 Count(),如果它是 0,那么我可以知道没有记录,如果它是 1,那么一个简单的 First() 就会让我得到记录。
我愿意打赌有更好的方法。