2012-05-23 61 views
3

我正在嘗試創建一個命令行快速程序,以將用戶從舊系統(非DNN)一次性導入到新系統。然而,NullReferenceException被扔在下面的代碼行:如何從命令行正確創建一個dotnetnuke用戶帳戶?

 var user = new UserInfo(); 
     user.PortalID = portalId; 
     user.FirstName = firstName; 

在最後一行是在異常發生。我知道這個代碼在模塊中運行時是有效的,因爲它是我正在使用的庫的一部分。我想這是錯誤的,因爲UserInfo類依賴於通常在Web環境中設置的信息。

有什麼辦法可以做到這一點?我真的不希望將此作爲模塊在生產站點上運行。

+0

你確定它的'user.FirstName =名字;'拋出異常,而不是線以上?如果是這樣,那麼它的'firstName'就是null,而不是你的'UserInfo'對象。 –

+0

這就是visual studio顯示的內容,firstname不爲null。 – KallDrexx

回答

1

您需要配置必要的提供者才能使用UserControllerUserInfo類。最直接的方法是使用網站的工作配置並將該應用作爲DNN模塊實施。 但是,您也可以嘗試將所需的DLL和配置節從DNN站點複製到控制檯應用程序,並使用DNN源來調試問題。

在這種情況下,源告訴設置UserInfo對象的FirstName屬性,因爲FirstName屬性由配置文件提供者,其使用的數據訪問緩存提供商和數據提供支持失敗。 默認情況下,配置文件由DNNProfileProvider實現,該文件使用FileBasedCachingProviderSqlDataProvider來獲取配置文件屬性和數據。調用ProfileController.GetUserProfile時,還會爲新的UserInfo對象檢索配置文件屬性定義。這就是爲什麼NullReferenceException被拋出。

在DNN 5.6.3相應的屬性有:

UserInfo.vb

<SortOrder(1), MaxLength(50), Required(True)> _ 
Public Property FirstName() As String 
    Get 
     Return Profile.FirstName 
    End Get 
    Set(ByVal Value As String) 
     Profile.FirstName = Value 
    End Set 
End Property 

<Browsable(False)> _ 
Public Property Profile() As UserProfile 
    Get 
     'implemented progressive hydration 
     'this object will be hydrated on demand 
     If _Profile Is Nothing Then 
      _Profile = New UserProfile 
      ProfileController.GetUserProfile(Me) 
     End If 
     Return _Profile 
    End Get 
    Set(ByVal Value As UserProfile) 
     _Profile = Value 
    End Set 
End Property