方法:モデルの違いデータベースアプリケーションに保存されている:には、どのようにデータベースに保管してアプリケーションモデルの違い

あなたがセキュリティシステムを使用して新しいアプリケーションを作成して有効にするとソリューションウィザード、エンドユーザの設定(モデルの違いは)されているデータベースに格納されている使用してModelDifferenceDbStoreのデフォルトでは、ストレージを。このトピックでは、データベース内の共有モデルの違い(管理者の設定)を格納する方法と一緒に、既存のアプリケーションでこの機能を有効にする方法について説明します。

いつソリューションウィザード新しいアプリケーション対応のセキュリティシステムを作成するために、エンドユーザの設定(モデルの違い)デフォルトModelDifferenceDbStoreデータベースに格納されています。このトピックでは、既存のアプリケーションでこの機能を有効にする方法だけでなく、データベース内の共有モデルの違い(管理者設定)を保存する方法について説明します。

Note 注意
このトピックで説明するアプローチは、モバイルプラットフォームでサポートされていないので、モバイルアプリケーションは、データベースに格納モデルの違いにあなたを許可していません。
このトピックで説明するモバイルプラットフォームのアプローチがサポートされていないので、モバイル・アプリケーションは、データベース内のストレージモデルの違いを許可していません。
System.Security.Principal.WindowsIdentity.GetCurrent()。名前の値が(に渡されたユーザ識別子として使用されているセキュリティシステムが無効になっているときIModelDifference.UserIdプロパティ)。だから、あなたは有効にすることができModelDifferenceDbStoreをここで説明する手法を使用して無効化セキュリティシステムとのWinFormsアプリケーションのために。しかし、あなたが有効にすることをお勧めされていないModelDifferenceDbStoreをするので、無担保ASP.NETアプリケーションのためのユーザーIDは、このインスタンス内のすべてのユーザーに対して同じになります。共有モデルの違いは、セキュリティシステムが無効になっている場合、両方のWinFormsとASP.NETのためにサポートされています。
システムセキュリティ。.Windows体識別.GetCurrent()。安全システムが無効になっている場合、ユーザ名の値は、(IModelDifference.UserIdに渡された属性)の識別子として使用されます。そのため、あなたはこの方法を使用することができ、ここでの違いDbStoreのWinFormsアプリケーションのためのモデルを有効にするには、無効なセキュリティシステムの使用を説明しました。しかし、このインスタンス内のすべてのユーザーのユーザーが同じユーザーIDであるため、ASP.NETアプリケーションをセキュリティで保護するためにModelDifferenceDbStoreを有効にすることは推奨されません。セキュリティシステムを無効にすると、リサイズやASP.NETのサポートは、モデルの違いを共有しました。

編集WinModule.csWinModule.vbリサイズモジュールプロジェクトにあります)ファイル。オーバーライドされてModuleBase.Setupの方法に加入XafApplication.CreateCustomModelDifferenceStoreXafApplication CreateCustomUserModelDifferenceStoreのイベント。これらのイベントハンドラでは、合格ModelDifferenceDbStoreのにインスタンスをe.Storeのパラメータ。パスModelDifferenceのにタイプをModelDifferenceDbStoreのコンストラクタ。ここでは、ModelDifferenceは、ビルトインされた永続オブジェクトからDevExpress.Persistent.BaseImpl(XPO)または名前空間からDevExpress.Persistent.BaseImpl.EFの実装(Entity Frameworkのための)名前空間IModelDifferenceのインターフェイスを。コンストラクタの注意CONTEXTID(初期化するために使用される最後のパラメータIModelDifference.ContextIdのプロパティ)。リサイズモジュールでは、異なるプラットフォームで同じユーザのために作成されたモデルの違いを区別するために「勝利」に設定します。

編集は、モジュールのWinFormsはWinModule.cs(WinModule.vb)ファイルを投影します。ModuleBase。セットアップ方法を書き換えるには、XAFアプリケーションをサブスクライブします。ストレージおよびXAFアプリケーションにおけるカスタムモデルの違いを作成する。カスタム・ユーザー・モデルの違いストアイベントを作成します。イベントハンドラでは、e.StoreパラメータにModelDifferenceDbStoreインスタンス。モデルタイプの違いの差DbStoreコンストラクタに伝達モデル。ここで、DevExpress社からModelDifference。.BaseImpl永続的な名前空間(XPO)またはDevExpress社から。.Baseimpl.EF永続的な名前空間(Entity Frameworkのは)永続オブジェクト構築されたインタフェースを実装しIModelDifference。最後のパラメータのコンストラクタコンテキストID(IModelDifference.ContextIdのプロパティを初期化するために使用される)ことに注意してください。リサイズモジュールでは、異なるプラットフォームで同じユーザーのために作成されたモデルの違いを区別するために、「勝利」に設定します。

 

公共の 密封された 部分 クラスMySolutionWindowsFormsModule:ModuleBase {
     プライベート 無効Application_CreateCustomModelDifferenceStore(オブジェクト送信者、CreateCustomModelDifferenceStoreEventArgs E){ 
        e.Store = 新しい ModelDifferenceDbStore((XafApplication)送信者、typeof演算(ModelDifference)、" 勝ちます" ); 
        e.Handled = ; 
    } 
    プライベート ボイドApplication_CreateCustomUserModelDifferenceStore(オブジェクト送信者、CreateCustomModelDifferenceStoreEventArgs E){ 
        e.Store= 新しい ModelDifferenceDbStore((XafApplication)送信者、typeof演算(ModelDifference)、" 勝ちます" ); 
        e.Handled = ; 
    } 
    // ... 
    公共 オーバーライド ボイドセットアップ(XafApplicationアプリケーション){
         塩基.Setup(アプリケーション)。
        application.CreateCustomModelDifferenceStore + = Application_CreateCustomModelDifferenceStore。
        application.CreateCustomUserModelDifferenceStore + = Application_CreateCustomUserModelDifferenceStore。
    } 
}

 

同様に、編集WebModule.csWebModule.vb)ファイルASP.NETモジュールプロジェクトにあるが、設定されたContextIDの代わりに「勝利」の「ウェブ」にパラメータを。

同様に、WebModule.csに位置編集ASP.NETモジュールプロジェクト(WebModule.vb)ファイルが、IDパラメータのコンテキストは「ウェブ」の代わりに「勝つ」に設定されています。

 

公共の 密封された 部分 クラスMySolutionAspNetModule:ModuleBase {
     プライベート 無効Application_CreateCustomModelDifferenceStore(オブジェクト送信者、CreateCustomModelDifferenceStoreEventArgs E){ 
        e.Store = 新しい ModelDifferenceDbStore((XafApplication)送信者、typeof演算(ModelDifference)、" ウェブ" ); 
        e.Handled = ; 
    } 
    プライベート ボイドApplication_CreateCustomUserModelDifferenceStore(オブジェクト送信者、CreateCustomModelDifferenceStoreEventArgs E){ 
        e.Store =新しい ModelDifferenceDbStore((XafApplication)送信者、typeof演算(ModelDifference)、" ウェブ" )。
        e.Handled = ; 
    } 
    // ... 
    公共 オーバーライド ボイドセットアップ(XafApplicationアプリケーション){
         塩基.Setup(アプリケーション)。
        application.CreateCustomModelDifferenceStore + = Application_CreateCustomModelDifferenceStore。
        application.CreateCustomUserModelDifferenceStore + = Application_CreateCustomUserModelDifferenceStore。
    } 
}

 

Note 注意
場合CreateCustomModelDifferenceStoreのイベントが処理され、共有モデルの違い(管理者設定)は、データベースに格納されています。変更Model.xafmlのデータベースレコードがすでに共有モデルの違いのために存在する場合、アプリケーションプロジェクトにあるファイルは無視されます。以下からのリロードの設定にModel.xafml、管理UIを有効にして使用してインポート共有モデルの違いアクション(または「共有モデル相違点」の記録と再起動を削除します)。この動作が不適切である場合は、このイベントを処理しません。のみRELEASEプロジェクトの設定でそれを扱います。
プロセスは、イベント「ストレージのカスタムモデルの違いを作成する」場合には、共有モデルの違い(管理者設定)は、データベースに格納されます。共有モデルの違いデータベースレコードがすでに存在する場合は、アプリケーションプロジェクトModel.xafmlファイルへの変更を無視します。Model.xafmlから管理UIを有効にして、インポート、共有モデルの差分演算(または削除レコードの「共有モデルの違い」と再起動)を使用し、設定をリロードします。この動作が適切でない場合は、このイベントを処理しません。RELEASEは、プロジェクトの設定でそれに対処します。

 

あなたはEntity Frameworkのを使用している場合は、登録ModelDifferenceModelDifferenceAspectあなたの中にエンティティタイプをDbConext

あなたはEntity Frameworkのを使用する場合は、モデルの違いと中DbConextでモデルのエンティティタイプの違いを登録してください。

 

使用してDevExpress.Persistent.BaseImpl.EFを。
// ... 
パブリック クラスMyDbContext:DbContext {
     // ... 
    公共 DbSet <ModelDifference> ModelDifferences { 取得しますセット; }
     公共 DbSet <ModelDifferenceAspect> ModelDifferenceAspects { 得ますセット; } 
}

 

私はあなたがXPOを使用し、実行モジュールのデザイナーをして追加ModelDifferenceModelDifferenceAspectへの持続的なタイプをエクスポートタイプセクション。

XPOの使用、モジュールの設計者の操作、およびモデルと「エクスポートタイプ」セクションにタイプの持続的な違いのモデルとの違い。

 

すべてのユーザーが読んだこと/への書き込みアクセスを確認ModelDifferenceModelDifferenceAspect種類を。

モデルのタイプでモデルの違いと違い、すべてのユーザーが読んだこと/書き込みアクセスを確保するために。

 

パブリック クラスアップデータ:ModuleUpdater {
     公共 オーバーライド ボイドUpdateDatabaseAfterUpdateSchema(){
         塩基.UpdateDatabaseAfterUpdateSchema()。

        PermissionPolicyRoleはdefaultrole = ObjectSpace.FindObject <PermissionPolicyRole>( BinaryOperator(" 名前"" デフォルト" ));
        もし(defaultroleという== NULL ){ 
            defaultroleという = ObjectSpace.CreateObject <PermissionPolicyRole> (); 
            defaultRole.Name = " デフォルト"; 
            defaultRole.AddObjectPermission <PermissionPolicyUser>(SecurityOperations.Read、" [たOID] = CurrentUserId()" 、SecurityPermissionState.Allow)。
            defaultRole.AddNavigationPermission(@ " アプリケーション/ NavigationItems /アイテム/デフォルト/アイテム/ MyDetails " 、SecurityPermissionState.Allow)。
            defaultRole.AddMemberPermission <PermissionPolicyUser>(SecurityOperations.Write、" ChangePasswordOnFirstLogon "" [たOID] = CurrentUserId()" 、SecurityPermissionState.Allow)。
            defaultRole.AddMemberPermission<PermissionPolicyUser>(SecurityOperations.Write、" StoredPassword "" [たOID] = CurrentUserId()" 、SecurityPermissionState.Allow)。
            defaultRole.AddTypePermissionsRecursively <PermissionPolicyRole> (SecurityOperations.Read、SecurityPermissionState.Deny)。
            defaultRole.AddTypePermissionsRecursively <ModelDifference> (SecurityOperations.ReadWriteAccess、SecurityPermissionState.Allow)。
            defaultRole.AddTypePermissionsRecursively <ModelDifferenceAspect> (SecurityOperations.ReadWriteAccess、SecurityPermissionState.Allow)。
            //あなたは中間層アプリケーション・サーバーを使用する場合「作成」権限は、さらに必要になる 
            defaultRole.AddTypePermissionsRecursively <ModelDifferenceを> (SecurityOperations.Create、SecurityPermissionState.Allow)。
            defaultRole.AddTypePermissionsRecursively <ModelDifferenceAspect> (SecurityOperations.Create、SecurityPermissionState.Allow)。                
        } 
        sampleUser.Roles.Add(defaultroleという)。
        // ... 
        ObjectSpace.CommitChanges(); 
    } 
    // ... 
}

 

ヒントヒント
参照してくださいどのように:ユーザーのモデルの違いを管理するための管理UIを有効にし、データベースに保存されたモデルの違いを管理するためのUIエレメントを有効にする方法については、トピックを。
データベースに保存された差分モデルを管理するためのUI要素を有効にする方法については、トピック:「ユーザー管理でモデルの違いに管理UIを有効にする方法に」を参照してください。
Note 注意
一緒に使用する場合の機能の以下の組み合わせがサポートされていません。
  • SecuredObjectSpaceProviderまたはXPObjectSpaceProviderはとのコンストラクタを使用して作成されたスレッドセーフにパラメータセット(このパラメータが有効ThreadSafeDataLayerを)。
  • アプリケーション全体のモデルの違いはされている使用して、データベースに保存されている(あなたはまだ使用して、データベース内のユーザー固有の違いを保存することができXafApplication.CreateCustomModelDifferenceStoreイベントをXafApplication.CreateCustomUserModelDifferenceStoreイベントを)。
  • カスタム永続フィールドで宣言されたアプリケーションレベルのモデルの違い。
  • 一緒に使用する場合は、以下の特徴の組み合わせをサポートしていません。
  • コンストラクタ真プロバイダまたはXPObjectSpaceProvider用に作成されたセキュリティオブジェクトのスペースを設定し、使用するスレッドセーフなパラメータ(このパラメータは、スレッドセーフなデータ層を可能にします)。  
  • データベースに格納されているXafApplicationを用いて差分モデルの適用範囲。XAFアプリケーション。)カスタム・ユーザー・モデルの違いストアイベントを作成します。   
  • カスタム永続フィールドは、アプリケーション・レベルのモデルの違いで宣言されました。
この構成では、データベースからカスタム持続フィールドに、アプリケーションの負荷情報とデータベース・スキーマを更新します。しかし、スレッドセーフなデータ層は、データベース接続が確立された後、データモデルを変更することはサポートされていません。
この構成では、アプリケーションがデータベースの永続性カスタム情報フィールドからロードされ、その後、データベーススキーマを更新しています。しかし、スレッドセーフなデータ層は、データベース接続の確立にデータモデルの変更をサポートしていません。

おすすめ

転載: www.cnblogs.com/foreachlife/p/How-to-Store-the-Application-Model-Differences-in-the-Database.html