【发布时间】:2009-08-25 19:01:10
【问题描述】:
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() 就可以得到记录。
我愿意打赌有更好的方法。
【问题讨论】:
-
你在哪里遇到这个错误?
-
我在返回的 Wcf 服务中运行时调试期间遇到错误。
标签: wpf wcf entity-framework ria