У меня возникают проблемы с попыткой запросить мою учетную запись хранилища Azure DocumentDb при попытке получить одну запись. Это мой код WebAPI:
// Controller...
public AccountController : ApiController {
// other actions...
[HttpGet]
[Route("Profile")]
public HttpResponseMessage Profile()
{
var userId = User.Identity.GetUserId();
var rep = new DocumentRepository<UserDetail>();
var profile = rep.FindById(userId);
if (profile == null)
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Profile not found");
return Request.CreateResponse(HttpStatusCode.OK, profile);
}
}
// Repository
public class DocumentRepository<TEntity> : IDocumentRepository<TEntity> where TEntity : IIdentifiableEntity
{
private static DocumentClient _client;
private static string _databaseName;
private static string _documentsLink;
private static string _selfLink;
public DocumentRepository()
{
_client = new DocumentClient(new Uri(ConfigurationManager.AppSettings["DocumentDbEndpointUrl"]), ConfigurationManager.AppSettings["DocumentDbAuthKey"]);
_databaseName = ConfigurationManager.AppSettings["DocumentDbDatabaseName"];
var _database = ReadOrCreateDatabase();
var collection = InitialiseCollection(_database.SelfLink, EntityName);
_documentsLink = collection.DocumentsLink;
_selfLink = collection.SelfLink;
}
// other methods...
public TEntity FindById(string id)
{
return _client.CreateDocumentQuery<TEntity>(_documentsLink).SingleOrDefault(u => u.Id.ToString() == id);
}
}
Именно этот метод FindById
вызывает следующую проблему:
Исключение типа "Microsoft.Azure.Documents.Linq.DocumentQueryException" произошло в Microsoft.Azure.Documents.Client.dll, но не было обработано в коде пользователя
Дополнительная информация: выражение запроса недопустимо, выражение return type
Foo.Models.DocumentDbEntities.UserDetail не поддерживается. Запрос должен оцениваться в IEnumerable.
Я не понимаю, что означает эта ошибка, или как я ее исправляю. Я не хочу возвращать IEnumerable
или любой класс потомков, так как этот метод возвращает либо записи 0
, либо 1
. Он работает, если я удаляю предложение SingleOrDefault
и меняю тип возврата на IQueryable
, однако это не то, что я хочу.