最初にエンティティフレームワークコードで同じテーブルに複数の外国のキーを処理する方法は?
エンティティフレームワークコアでは、熱狂的な関係をモデル化することが不可欠です。遭遇すると、同じテーブルに複数の外部キーを持つモデルを作成すると、異常を引き起こす可能性があります。
あなたの例では、チームとチームの1つの関係を獲得するためにチームを定義し、1つのホームチームとゲストチームが含まれます。ただし、最初の方法では、サイクルの参照異常がトリガーされます。
この問題を解決するには、hasRequired()およびwithmany()およびwithmany()メソッドのスムーズなAPI構成、およびwithmany()メソッドとonmodelcreating()を使用する必要があります。これは更新されたモデルです:このモデルでは
:
public class Team { public int TeamId { get; set; } public string Name { get; set; } public virtual ICollection<Match> HomeMatches { get; set; } public virtual ICollection<Match> AwayMatches { get; set; } } public class Match { public int MatchId { get; set; } public int HomeTeamId { get; set; } public int GuestTeamId { get; set; } public float HomePoints { get; set; } public float GuestPoints { get; set; } public DateTime Date { get; set; } public virtual Team HomeTeam { get; set; } public virtual Team GuestTeam { get; set; } } public class Context : DbContext { // ... protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Match>() .HasOne(m => m.HomeTeam) .WithMany(t => t.HomeMatches) .HasForeignKey(m => m.HomeTeamId) .OnDelete(DeleteBehavior.Restrict); // or DeleteBehavior.NoAction modelBuilder.Entity<Match>() .HasOne(m => m.GuestTeam) .WithMany(t => t.AwayMatches) .HasForeignKey(m => m.GuestTeamId) .OnDelete(DeleteBehavior.Restrict); // or DeleteBehavior.NoAction } }
チームエンティティには、ホームマッチとアウェイマッチの2つの競技が含まれます。
- マッチエンティティには、HometeamIDとGuestTeamIDがあります。
- onModelCreating()では、Fluent APIを使用して関係を構成します。これにより、循環の参照を防ぐことができます。
- 自己参照によって引き起こされるレベルのカプレットからの削除を防ぐために、明示的に
- (または )に設定されています。
-
OnDelete(DeleteBehavior.Restrict)
DeleteBehavior.NoAction
この方法により、EF Coreモデルの同じテーブルに複数の外部キーを確立することができます。 新しいEFコアバージョンではが放棄されていることに注意してください。 または
データベース提供プログラムの動作に応じて、関連するレコードが存在しない限り、削除操作を防ぎます。 特定のニーズに依存するものを選択します。 WillCascadeOnDelete(false)
以上が最初にエンティティフレームワークコードで同じテーブルに複数の外国のキーを処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Stock Market GPT
AIを活用した投資調査により賢明な意思決定を実現

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

std :: source_location :: current()をデフォルトパラメーターとして使用して、コールポイントのファイル名、行番号、関数名を自動的にキャプチャします。 2。#definelog(MSG)log(MSG、STD :: source_location :: current()などのマクロを介してログコールを簡素化できます。 3.ログレベル、タイムスタンプ、その他の情報でログコンテンツを拡張できます。 4.パフォーマンスを最適化するには、リリースバージョンで機能名を省略するか、位置情報を無効にすることができます。 5。列()およびその他の詳細はめったに使用されませんが、利用可能です。 std :: source_locationを使用すると、手動で渡さずに非常に低いオーバーヘッドでログのデバッグ値を大幅に改善できます

STD :: IFSTREAMのSEEKGおよびTELLGメソッドを使用して、プラットフォーム間でファイルサイズを取得します。バイナリファイルを開き、最後まで配置することにより、tellg()を使用してバイト数を返します。 2。std :: filesystem :: file_sizeを使用することをお勧めします。コードは簡潔で、エラーは例外を介して処理されます。 C 17標準を有効にする必要があります。 3。POSIXシステムでは、STAT()関数を使用して、パフォーマンスに敏感なシナリオに適したファイルサイズを効率的に取得できます。適切な方法はコンパイラとプラットフォームに基づいて選択する必要があり、STD ::ファイルシステムを最初に使用する必要があります(利用可能な場合)。

std :: vectorの基本的な使用には、次のものが含まれます。1。ベクトルを宣言します。 2. push_back()で要素を追加します。 3。初期化リストで初期化。 4。範囲のループトラバーサル。 5。インデックスまたはback()を介して要素にアクセスします。 6。要素を変更するための値の直接割り当て。 7。fop_back()でエンド要素を削除します。 8。SIZE()を呼び出して、要素の数を取得します。 Constautoを使用し、コピーを避け、リザーブを事前に挿入してパフォーマンスを改善し、アクセス前に空でないことを確認することをお勧めします。このデータ構造は、文字列リストを処理する効率的で好ましい方法です。

Cでのオペレーターの過負荷により、標準演算子の新しい動作をカスタムタイプに割り当てることができます。1。メンバー関数の過負荷を介して新しいオブジェクトを返します。 2。オーバーロード=現在のオブジェクトを変更し、参照を返します。 3。フレンド関数のオーバーロード

答えは、シンプルなTCPクライアントとサーバーを作成するには、オペレーティングシステムが提供するソケットプログラミングインターフェイスが必要であるということです。サーバーは、ソケットの作成、バインディングアドレス、ポートの聴取、接続の受け入れ、およびデータの送信と受信により、通信を完了します。クライアントは、ソケットの作成、サーバーへの接続、リクエストの送信、および応答の受信により、インタラクションを実現します。サンプルコードは、必要なヘッダーファイル、ポート設定、エラー処理、リソースリリースなど、LinuxまたはMacOでBerkeley Socket APIを使用することの基本的な実装を示しています。コンパイル後、最初にサーバーを実行し、次にクライアントを実行して双方向通信を実現します。 Windowsプラットフォームは、Winsockライブラリを初期化する必要があります。この例は、基本的なソケットプログラミングの学習に適したブロッキングI/Oモデルです。

Cで正規表現を使用するには、ヘッダーファイルを含めて、パターンマッチングとテキスト処理に提供する機能を使用する必要があります。 1。STD:: regex_matchを使用して完全な文字列に一致し、文字列全体がパターンに準拠している場合にのみtrueを返します。 2。STD:: regex_searchを使用して、文字列の任意の位置で一致を見つけます。 3。STD:: SMATCHを使用してキャプチャグループを抽出し、マッチ[0]、マッチ[1]、およびその後のサブマッチを介して完全な一致を取得します。 4。STD:: regex_replaceを使用して一致するテキストを置き換え、1ドルや2ドルなどの参照でキャプチャグループをサポートします。 5.正規表現を構築するときにISETを追加できます(

Falsesharingは、複数のスレッドが同じキャッシュラインの異なる変数を変更し、キャッシュの故障とパフォーマンスの劣化をもたらすと発生します。 1.構造塗りつぶしを使用して、各変数を1つのキャッシュラインのみを占めるようにします。 2。メモリアライメントにalignasまたはstd :: hardware_destructive_interference_sizeを使用します。 3.スレッドローカル変数を使用して最終的に結果をマージし、それにより擬似共有を回避し、マルチスレッドプログラムのパフォーマンスを改善します。

c 20coroutinessarefunctions thatcansuspendandresumeexecutionsco_await、co_yield、orco_return、asynchron suldy lazyEvaluationを有効にします
