2015-02-24 2 views
-1

В настоящее время я разрабатываю приложение для Windows Phone 8.1 с Azure. (Я бы не рекомендовал это вам после моего опыта). Во всяком случае ... У меня есть классы множественного контроллера, которые действительно делают то же самое (проверьте, существует ли что-то в моей базе данных и если оно не создается). У меня проблема должна быть в функции Read(), которая проверяет базу данных, если запись уже существует:Azure MobileService Null Reference Exception

public async void Read(Device device) 
{ 
    IMobileServiceTable mobileServiceTable = Connect(); 
    MobileServiceCollection<Device, Device> devices = null; 
    try 
    { 
     devices = await mobileServiceTable.MobileServiceClient.GetTable<Device>().Where(d => d.Manufacturer == device.Manufacturer && d.Model == device.Model).ToCollectionAsync(); 
    } 
    catch (Exception e) 
    { 
     if (_onDeviceControllerListener != null) 
     { 
      _onDeviceControllerListener.OnError(ControllerError.Error.ReadFromDatabase, e.ToString()); 
     } 
      return; 
     } 

    if (_onDeviceControllerListener != null && devices != null) 
    { 
     _onDeviceControllerListener.OnRead(devices); 
    } 
} 

Это один работает прекрасно, как это следует, но Одер один, который в основном просто копия бросает NullReferenceException по строке «apps = ожидают mobileServiceTab ...»:

public async void Read(Model.App app) 
{ 
    IMobileServiceTable mobileServiceTable = Connect(); 
    MobileServiceCollection<Model.App, Model.App> apps = null; 
    try { 
     apps = await mobileServiceTable.MobileServiceClient.GetTable<Model.App>().Where(a => a.HardwareId == app.HardwareId && a.PackageId == app.PackageId).ToCollectionAsync(); 
    } 
    catch (Exception e) 
    { 
     if (_onAppControllerListener != null) 
     { 
      _onAppControllerListener.OnError(ControllerError.Error.ReadFromDatabase, e.ToString()); 
     } 
     return; 
    } 

    if (_onAppControllerListener != null) 
    { 
     _onAppControllerListener.OnRead(apps); 
    } 
} 

Кто-нибудь знает, в чем проблема? Спасибо за помощь

+0

Что такое трассировка стека для вашего исключения? – carlosfigueira

+0

Можете ли вы пройти через него и сообщить нам, какой объект имеет значение null при ошибке? – Chris

ответ

0

Вы можете добавить try ... catch block и проверить исключение «MobileServiceInvalidOperationException». Также взгляните на столбец, чтобы узнать, что происходит.

Трассировка скрипача также сообщит вам, если вы сделали успешный вызов службе мобильной связи для извлечения данных. Затем вы можете определить, находится ли проблема в том, как вы обрабатываете данные в своем коде.

Посмотрите еще раз на свой класс MobileServiceContext и убедитесь, что все свойства учитываются особенно для свойств, которые используют класс ModelApp. Например,

public virtual DbSet<Model.App> SomeProperty { get; set; } 

Надеюсь, это поможет.

Смежные вопросы