2013-04-03 2 views
0

Я пытаюсь сохранить пользователя в моей таблице Azure, но при попытке создать пользователя я получаю «объект, не установленный в экземпляр объекта», почему ???Объект не установлен в экземпляр объекта - LINQ WCF

UserEntity entry = new UserEntity(); 
entry.UserName = pUserName; 
entry.MiniatureImageURL = blob.Uri.ToString(); 
entry.PhotosUrl.Add(blob.Uri.ToString()); //THIS IS A LIST of strings 
Connection cn = new Connection(); 
cn.AddUserEntries(entry); 

Мой класс соединение определяется следующим образом:

Здесь я пытаюсь добавить нового пользователя в текущем контексте, а затем попытаться сохранить объект в хранилище:

public void AddUserEntries(UserEntity newItem) 
{ 
    try 
    { 
     this.context.AddObject("UserEntity", newItem); 
     this.context.SaveChanges(); 
    } 

    catch (Exception ex) 
    { 
     throw new Exception(ex.Message); 
    } 
} 

static Connection() 
{ 
    try 
    { 
     storageAccount = CloudStorageAccount.FromConfigurationSetting("dataconnectionstring"); 

     CloudTableClient.CreateTablesFromModel(
     typeof(Connection), 
     storageAccount.TableEndpoint.AbsoluteUri, 
     storageAccount.Credentials); 
    } 

    catch (Exception ex) 
    { 
     throw new Exception(ex.Message); 
    } 
} 

public Connection() 
{ 
    try 
    { 
     this.context = new UserDataContext(storageAccount.TableEndpoint.AbsoluteUri, storageAccount.Credentials); 
     this.context.RetryPolicy = RetryPolicies.Retry(3, TimeSpan.FromSeconds(1)); 
    } 

    catch (Exception ex) 
    { 
     throw new Exception("There was a problem trying to create the user. " + ex.Message); 
    } 
} 
+2

Почти все случаи «NullReferenceException» одинаковы. См. «[Что такое исключение NullReferenceException в .NET?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)» для некоторых советов. –

+0

Почему вы используете 'catch (Exception ex) {throw new Exception (ex.Message);}' Вам бы лучше не перехватывать исключения. –

+0

проблема в том, что я не знаю, что может быть ошибкой, так как я не могу проверить это на своем локальном компьютере, так как лазурный эмулятор не работает, и когда я пытаюсь облако, я не знаю, что здесь null. –

ответ

3

Единственный объект, который вы разыменовываете в коде, - blob.Uri. Проверьте, blob: null, или blob.Uri - null.

2

Если вы используете

try 
{ 
    ... 
} 
catch (Exception ex) 
{ 
    throw new Exception(ex.Message); 
} 

Вы потеряете трассировки стека. Если вы удалите эти блоки try catch. Вы должны иметь возможность получить правильную трассировку стека для строки, вызвавшей эту проблему. Вы можете поместить контрольную точку в свой код на этой строке, чтобы увидеть, какая ее часть равна нулю. В этот момент вы можете посмотреть, ПОЧЕМУ, что значение равно null, а также добавление надлежащих безопасных защит для обеспечения того, чтобы ваш код не выдавал эту строку, когда это значение равно null.

+0

спасибо, не знаю, я привык мои учителя, чтобы попытаться поймать все .. –

+0

Нет проблем. Вот [хорошая статья о том, какие исключения для улова] (http://blogs.msdn.com/b/ericlippert/archive/2008/09/10/vexing-exceptions.aspx), если вы ищете дополнительную информацию. Вы никогда не должны улавливать общее исключение за пределами корня вашего приложения, потому что это также может ловить исключения, которые вы не хотите обрабатывать как «OutOfMemoryException» и «ThreadAbortException». –

+0

еще одна вещь, которую следует отметить, заключается в том, что если вы поймаете более определенный тип на более высоком уровне, например 'InvalidOperationException', он не войдет в правильный блок catch, потому что новый тип исключения является только« Исключением ». Если вы ищете повторное исключение после выполнения некоторой обработки, вы будете использовать 'throw ex' вместо' throw new Exception (ex.Message) ' –

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