方法:カスタムベースの永続クラスはどのようにを実装し、カスタム永続基本クラスを実装します

XAF船ビジネスクラスライブラリアプリケーションで使用するための準備ができて、永続クラスの数が含まれています。すべてのこれらのクラスから派生BaseObjectの同じライブラリー内で宣言ベースの永続クラス。これは推奨に使用できる機能豊富な永続クラスです。しかし特定のシナリオでは、それはあなたの要件を満たしていない場合があります。このケースでは、いずれかのカスタム1を実装するためにXPOによって提供されるベースの永続クラスのいずれかを使用することができます。このトピックでは、全体eXpressAppフレームワークを通じて期待通りに機能することを確認するために、カスタムベースの永続クラスを実装するために実行するために必要な手順を説明します。カスタムクラスを実装する必要があり、XPOが提供する基底クラスの1つを使用したくない場合は、参照ベース永続クラス 代わりに、ヘルプトピック。

XAFは、図書館サービスに付属し、ライブラリーは、アプリケーションでの使用のために利用可能な多くの継続的なクラスが含まれています。これらのクラスはすべて、自由宣言BaseObjectベースの永続クラスの同じライブラリに導出されています。豊富な機能を備えた永続クラスを使用することをお勧めします。しかし、いくつかのケースでは、それはあなたの要件を満たしていない場合があります。この場合、提供される基本的なカスタムクラスXPO永続クラスのいずれかを使用して達成することができます。このトピックでは、eXpressAppフレーム全体で期待どおりに動作していることを保証するために必要なカスタムイル永続クラスを達成するための手順を説明します。カスタムクラスを実装し、提供される基本的なクラスXPOのいずれかを使用したくない場合は、基本的な永続クラスのヘルプトピックを参照してください。

ヒントヒント
完全なサンプルプロジェクトは、DevExpress社のコード例のデータベースで利用可能でhttp://www.devexpress.com/example=E1255
完全なサンプルプロジェクトは、コードサンプルデータベースDevExpress社で見つけることができますhttp://www.devexpress.com/example=E1255

あなたがゼロからカスタムベースの永続クラスを実装することができますが、XPOによって提供される基底クラスの1つからそれを導出することにより終了する機能を再利用することをお勧めします。この例では、XPCustomObjectからカスタムベースクラスを派生します。このXPCustomObjectクラス支持体は削除し、オプティミスティック同時実行制御を延期が、自動生成された主キーのプロパティを提供していません。

カスタムベースクラスの永続性を実装するためにゼロからスタートすることができますが、それはXPOの一つで基本クラスから派生した機能を終了するのが最善ですが、exit関数を再利用するために提供。この例では、導出カスタムベースクラスをXPCustomObjectます。このクラスのサポートはXPCustomObject削除し、オプティミスティック同時実行制御を遅らせますが、自動的に生成された主キー属性を提供していません。

 

自動生成された主キープロパティを実装

自動生成を実現するために、プライマリキー属性

あなたがから派生基底クラスが自動生成されたキープロパティを持っていない場合は、手動で実装する必要があります。私たちは、新しいデータベースのための複合化合物またはキーを実装することはお勧めしません。それは特定のシナリオでは、複合キーを持つレガシー・データベースのための永続クラスを設計することが可能であるが、それは複合キーを使用すると、デフォルトの機能にいくつかの制限を課しとしてこれを避けるために、データベーススキーマを変更することは常に良いです。参照してください化合物の鍵とデータベーステーブルの永続オブジェクトを作成する方法

何の基底クラスが自動的にキープロパティを生成しない場合は、手動で達成するために必要とされます。お勧めまたは新しいデータベースの複合キー複合キーを実装していません。いくつかのケースでは、あなたは、永続的な、従来のデータベース設計クラスに複合キーを使用することができますが、それはいくつかの制限が複合キーのデフォルトの機能を使用しているため、このような状況を回避するために、データベースのスキーマを変更するのが最善ですが。データベーステーブルに永続オブジェクトを作成するために、複合キーを使用する方法を参照してください。

KB記事の詳細を学ぶために。次のコードスニペットは、XPOは、その値を自動生成する必要があることを指定するキー属性でマークされたGUIDプロパティを示しています。XPOが唯一のInt32とGUIDタイプのキー属性を経由して、キーのプロパティ値の自動生成をサポートしていることに注意してください。

詳細については、KBの記事を参照してください。次のコードセグメントは、値XPOを自動的に生成することが指定キー属性とGUID属性タグを示す図です。注、XPOは、キータイプGUIDの属性値とのInt32キープロパティによって自動生成をサポートしています。

使用してシステムを。
使用してSystem.ComponentModelを。
使用してDevExpress.Xpoを。
使用してDevExpress.Xpo.Metadataを。
使用してDevExpress.ExpressAppを。
// ... 
[非永続]
 パブリック 抽象 クラスBasePersistentObject:XPCustomObject {
     公共 BasePersistentObject(セッションsession):ベース(セッション){}
    [永続(" のOid ")、キー()、ブラウズ可能()、MemberDesignTimeVisibility()]
     プライベートのGuid _Oid = Guid.Empty。
    [PersistentAlias(がNameOf(_Oid))、閲覧可能()]
     公共のGuidのOid { 取得 { 戻り_Oidと、}}
     保護 オーバーライド ボイドOnSaving(){
         塩基.OnSaving()。
        もし(!(セッションがある NestedUnitOfWork)&& Session.IsNewObject())
            _Oid = XpoDefault.NewGuid()。
    }
}

 

それは(自動生成された主キーのための)単一のプロパティが含まれているとして、このクラスを永続化するためにあまり意味がありませんので、クラスは、非永続としてマークされています。その結果、主キー列は、このクラスの子孫に対応するデータベーステーブルに作成されます。SQL文からのJOIN冗長この排除は、このようにデータベースのパフォーマンスを向上させること、XPOによって生成されたクエリ。また、あなたのクラスから派生し、特定の状況での作業のネストされたユニットを介して作成された新規オブジェクトの正しい保存をサポートするための実証され方法でOnSavingメソッドをオーバーライドする必要があります。

あまり重要のような保持、それは(自動生成キーのための)単一の属性が含まれているので、このクラスは、非永続としてマークされているため。したがって、主キー列は、対応するデータベーステーブル内のそのような子孫を使用して作成されます。ステートメントSQLクエリを登録しよ冗長このなくすことにより、データベースのパフォーマンスを向上させること、生成さXPO。また、クラスから派生した新しいオブジェクトを保存して、与えられた状況での作業のネストされたユニットを作成する権利を支援するためのOnSave方法を実証するために書き直されなければなりません。

 

ToStringメソッドメソッドを実装

ToStringメソッドを実装

完全なカスタムベースの永続クラスの実装には、デフォルトのプロパティを管理するために、そのToStringメソッドをオーバーライドします。デフォルトプロパティが検索プロパティエディタに表示され、フォームの字幕生成に参加しています。さらに、それらは自動的にFullTextSearchアクションで使用され、リストビューに最初に表示されます。カスタムベースの永続クラスを実装する場合、DefaultProperty属性がクラスに適用されているかどうかをチェックし、その値を返すようにToStringメソッドをオーバーライドします。

持続的なカスタムベースクラスの実装、管理するためのオーバーライドデフォルトのプロパティToStringメソッドを完了します。デフォルトプロパティは、タイトルに「検索プロパティエディタ」で表示し、生成された形で参加しています。「全文検索」操作の使用によって自動的に加えて、彼ら、そして最初のリストビューに表示。カスタムベースの永続クラスを実装し、オーバーライドToStringメソッドは、クラス属性DefaultPropertyは、その値を返すかどうかをチェックするために適用されます。

[非永続]
 パブリック 抽象 クラスBasePersistentObject:XPCustomObject {
     // ... 
    プライベート ブールisDefaultPropertyAttributeInit。
    プライベートXPMemberInfo defaultPropertyMemberInfo。    
    公共 オーバーライド 文字列のToString(){
         場合(!isDefaultPropertyAttributeInit){
            DefaultPropertyAttributeます。attrib = XafTypesInfo.Instance.FindTypeInfo(
                。メソッドGetType())FindAttribute <DefaultPropertyAttribute> ();
            もし(ATTRIB!= nullの
                defaultPropertyMemberInfo = ClassInfo.FindMember(attrib.Name)。
            isDefaultPropertyAttributeInit = ;
        }
        もし(!defaultPropertyMemberInfo = NULL ){
             オブジェクト OBJ = defaultPropertyMemberInfo.GetValue(もし(!OBJ = nullのリターンobj.ToString();
        }
        リターン ベース.ToString();
    }
}

 

おすすめ

転載: www.cnblogs.com/foreachlife/p/How-to-Implement-a-Custom-Base-Persistent-Class.html