この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 36284|答える: 0

[出典] EF Core Series (3) エンティティフレームシャドウ属性 [再版]

[リンクをコピー]
2021年2月7日 14:15:08に投稿 | | | |
EF Core Series 2はOnModelCreatingをカプセル化し、反射を用いてインデックスを作成するなどを備えています
https://www.itsvse.com/thread-9392-1-1.html

シャドウプロパティとは、.NETエンティティクラスには定義されていないが、EFコアモデルでそのエンティティタイプに対して定義されているプロパティのことです。 これらの属性の値や状態は、変更トラッカー内で完全に管理されます。 シェーディングプロパティは、データベース内のデータがマッピングされたエンティティタイプで公開されるべきでない場合に役立ちます。
エンティティフレームワークのコアでは、「シャドウ」属性と呼ばれる新しいタイプの属性が導入されましたが、これはEF 6.xには存在しません。

影属性は存在しません。 .NETエンティティクラス。 代わりに、エンティティデータモデル内の特定のエンティティタイプに合わせて設定できます。 コンテキストクラスのOnModelCreating()メソッドで設定できます。

以下の図はシャドウ属性を示しています。



上の画像に示されているように、シャドウ属性はあなたのエンティティクラスには属していません。 したがって、エンティティの他のプロパティにアクセスする際にはアクセスできません。 シェーディングプロパティはエンティティデータモデル構築時にエンティティタイプのみ設定可能で、データベースの列にもマッピングされます。 シャドウプロパティの値と状態は変更トラッカーでのみ保持されます。

影の特性の実用的な側面を理解しましょう。 データベーステーブル内の各レコードの作成日と更新日を維持する必要があるとしましょう。 EF Coreでエンティティの生成日と修正日を設定する方法を、エンティティクラスのCreatedDateとUpdatedDateプロパティを定義することで学びました。 ここでは、エンティティクラスにシャドウプロパティを含める代わりにシャドウプロパティを使うことで同じ結果を得る方法を見ていきます。

以下の学生実体クラスを検討してください。

上の学生クラスCreatedDateおよびUpdatedDateの属性は含まれていません作成または更新された時刻を維持するために。 学生エンティティのシャドウプロパティとして設定しています。

シャドウ特性を定義する

Fluent APIを使ってエンティティタイプのシャドウプロパティを定義するには、OnModelCreating() メソッドを使うことができます。

以下の構成では、学生エンティティの2つのシェーディングプロパティ、CreatedDateとUpdatedDateを設定します。


ご覧の通り、Property()メソッドはシャドウプロパティの設定に使われます。 シャドウプロパティの名前を文字列として、型を汎用パラメータとして指定します。 Property()メソッドで指定された名前が既存のプロパティの名前と一致すると、EF Coreはその既存のプロパティをシャドウプロパティとして構成し、新しいシャドウプロパティを導入しません。

データベース内のシャドウプロパティ

シャドウプロパティが定義されたら、シャドウプロパティが対応するデータベースの列にマッピングされるため、データベーススキーマを更新する必要があります。

これを行うには、Visual Studioのパッケージマネージャーコンソールで以下のコマンドを使ってデータベース移行を追加します。


学生テーブルには、以下のようにSQL ServerのCreatedDateとUpdatedDateの2つの列が含まれます。



したがって、これらのプロパティをStudentクラスに含まずシャドウプロパティとして設定しても、データベースには対応する列が存在します。

シャドウプロパティへのアクセス

EntityEntryのシャドウプロパティの値を取得または設定するには、Property()メソッドを使うことができます。 以下のコードはシャドウプロパティの値にアクセスします。

しかし、私たちのシナリオでは、SaveChanges()メソッドでこれらのシャドウプロパティを自動的に設定したいので、各エンティティオブジェクトで手動で設定しなくて済むようにしたいです。 そこで、以下のようにコンテキストクラスでSaveChanges()メソッドをオーバーライドします。

これにより、CreatedDateとUpdatedDateのシャドウプロパティの値が自動的に設定されます。

次に、次のコードを実行し、データベース内の記録を確認します。


上記のコードは、学生のCreatedDateおよびUpdatedDateに以下の記録を挿入します。



つまり、シャドウプロパティを設定することで、エンティティクラスに含める必要はありません。

すべてのエンティティにシャドウプロパティを設定してください

すべてのエンティティにシャドウプロパティを一度に手動で設定する代わりに、手動で設定できます。

例えば、以下の画像のように、CreatedDateとUpdatedDateのすべてのエンティティを前回設定できます。


シャドウプロパティを使うのはいつですか?

シャドウ属性は2つの状況で使用できます。

上記のような状況のように、マッピングされたエンティティにデータベースの列を公開したくない場合。
外部キー属性を公開したくなく、ナビゲーション属性だけを関係管理に使いたい場合。 外部キープロパティはシャドウプロパティとなり、データベースの列にマッピングされますが、エンティティのプロパティとしては公開されません。 (EF Coreでは、エンティティクラスに外部鍵プロパティを定義していない場合、自動的にシャドウプロパティが生成されます。) 外部キーのプロパティを手動で設定する必要はありません。 )


リソース:

ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。




先の:MySQLはクエリ結果をファイルにエクスポートします
次に:ASP.NET ViewComponentの使い方に関するCore ViewComponentチュートリアル
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com