Служба RIA Domain имеет этот метод ...
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);
}
При вызове с несуществующим идентификатором, GetCmsDealer () вызывает barfs с исключением около
Невозможно привести объект типа 'System.Object []' к типу 'RIAServicesLibrary.Web.Models.CmsDealer []'.
У меня сложилось впечатление, что он просто вернет ноль, что я смогу проверить позже. Но как-то этого не происходит. Все примеры, которые я нахожу, показывают, что что-то вроде этого работает нормально.
Любое понимание полезно, я немного озадачен и немного новичок об EF, RIA и Wcf.
Обновлено: Проблема в том, что мне нужно отследить сбой на всем пути до Wcf, чтобы приложение, которое в конечном итоге вызывает GetDealer, могло обнаружить, что решения не было. В идеале мне нужно сделать это, не оставляя необъяснимых исключений вокруг:)
Решение try / catch внутри GetCmsDealer позволит мне обнаружить сбой, но до сих пор нет способа перезапустить «пустой» объект 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 () возвращает мне запись.
Готов поспорить, есть лучший способ.