3

古いシステム (非 DNN) から新しいシステムにユーザーを一度だけインポートするコマンド ライン クイック プログラムを作成しようとしています。ただし、NullReferenceException次のコード行で a がスローされます。

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

その最後の行で、例外が発生します。このコードは、私が使用しているライブラリの一部であるため、モジュールで実行すると機能することがわかっています。UserInfoクラスは通常 Web 環境でセットアップされる情報に依存しているため、これはエラーになっていると思います。

これを行う方法はありますか?これを本番サイトでモジュールとして実行したくありません。

4

1 に答える 1

1

UserControllerおよびUserInfoクラスを使用するには、必要なプロバイダーを構成する必要があります。これを行う最も簡単な方法は、Web サイトの作業構成を使用し、アプリを DNN モジュールとして実装することです。ただし、必要な DLL および構成セクションを DNN サイトからコンソール アプリケーションにコピーし、DNN ソースを使用して問題をデバッグすることもできます。

この場合、ソースは、データ アクセスにキャッシング プロバイダーとデータ プロバイダーを使用するプロファイル プロバイダーによってプロパティがサポートされているため、UserInfoオブジェクトのFirstNameプロパティの設定が失敗したことを伝えます。FirstNameデフォルトでは、 profile は、およびをDNNProfileProvider使用してプロファイルのプロパティとデータを取得する によって実装されます。が呼び出されると、新しいオブジェクトのプロファイル プロパティ定義も取得されます。それが投げられる理由です。FileBasedCachingProviderSqlDataProviderUserInfoProfileController.GetUserProfileNullReferenceException

DNN 5.6.3 の対応するプロパティは次のとおりです。

ユーザー情報.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
于 2012-05-24T08:36:21.157 に答える