問題タブ [tph]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c#-4.0 - Entity Framework TPH と具象クラスとの 1 対多の関係
私は保険契約を管理するために MVC5 Web サイトに取り組んできましたが、設計上の問題と思われるものに行き詰まっています。私は、ポリシーと呼ばれる次の抽象クラスを持つTPHエンティティの状況を最初にコードしています。
そして、次の 2 つの具象クラス:
そして最後に、上記の両方の具体的なクラスと 1 対多の関係を持つクラス:
ビジネス要件は、顧客が傘の補償を希望する場合、傘の補償のみが必要な場合は傘の保険を購入するか、傘の補償と賠償責任の補償が必要な場合はパッケージの保険を購入することです (住宅所有者と自動車の保険をバンドルすることを望むコマーシャルなど)。顧客がどれだけの保険に加入しているかを表すクラス (クラス Umb) は、顧客が傘型保険を単独の保険またはパッケージで購入したかどうかに関係なく同じです。
新しい Umb を作成してポリシー (アンブレラまたはパッケージ) を仮想ポリシー プロパティに追加し、具体的なポリシー クラスのリストから Umb オブジェクトのリストを表示しようとすると、何も表示されません。
データベースを調べたところ、データベースの移行を行ったときに、UmbrellaPolicy_PolicyID、PackagePolicy_PolicyID、および Policy_PolicyID の 3 つの主要な列があることがわかりました。正しいポリシー ID が Policy_PolicyID 列に正常に追加されますが、エンティティ フレームワークは、使用している具象クラス (厳密に型指定されたビュー) に応じて、Umbrella または Package 列を参照していると思います。明らかな何かが欠けているか、不安定な実装パスをたどったように感じます。誰かが私に指摘できる提案や読み物は素晴らしいでしょう. ありがとう!
sql-server - EF 6.1 での TPT から TPH への移行
パフォーマンスの問題のため、オブジェクト階層を TPT から TPH 構造に移行する必要があります。ある構造から別の構造にデータを移行する最も簡単な方法はありますか? オブジェクト階層には約 15 個のクラスが含まれており、移行スクリプトを手動で記述したくありません。視覚的なツール、または流暢なインターフェースを備えたある種の移行ツールがあればよいでしょう。ありがとうございました。
PS サーバーは SQL Server 2014 です。
c# - Entity Framework 6 を使用して、2 つの異なる識別子フィールドにネストされた TPH を実装する
私は EF6 を使用しており、最初に edmx からコードに移行しています。私は既存のDBからリバースエンジニアリングを行い、「Contacts」と呼ばれるテーブルでネストされたTPHを使用して、以前のモデルを再現しようとしています。第 2 レベルの識別器。
私はこのようなものが欲しいです:
Contact、Model、および Customer クラスを Abstract としてコーディングし、BookingModel、ScoutingModel、Agency、Client、Service を Concrete としてコーディングしましたが、"Type" フィールドと "Subtype" フィールドは識別子であるため、それらを含めません。
マッピングコードは次のとおりです。
しかし、これは機能していません。次のようなエラーが発生します
(52,10) : エラー 3023: 52、68、75、82、89、98、106、729、747 行目から始まるフラグメントのマッピングに問題があります: 列 Contact.Type には既定値がなく、null 可能ではありません。エンティティ データを格納するには、列の値が必要です。
DB の「Type」および「SubType」フィールドは、デフォルト値のない Tinyint nullable です。nullable として変更するか、デフォルト値を指定することも試みましたが、結果のエラーは変更されません。
マッピングの設定に何か間違ったことをしていますか、それともこのシナリオに直面するために間違った方法を選択していますか?
oracle - Oracle を使用した EF6 TPH
最初に EF6 コードを使用して既存の Oracle データベースをマップし、階層ごとのテーブルを作成しようとすると、現在いくつかの問題が発生しています。マップしたいテーブルのスクリプトは次のようになります。
これは、データベース接続情報を含む Oracle サーバー上のテーブルであり、すべての Oracle データベース情報には CN_PROVIDER = 0 が含まれていますが、SQL データベース情報には CN_PROVIDER = 1 が含まれています。
したがって、この階層を次のようにマッピングするのは自然なことでした
ただし、データにアクセスしようとすると、常に次のエラーが発生します。
私はすでにこれを使用してマップしようとしました:
そして、私は機知に富んでいます-次の場合に誰かが知っていますか? 2-何か足りない?
今は先に進みます (そして、リポジトリ レイヤーでファクトリを使用して階層を実装します) が、提案されたソリューションを試してみるつもりです - 事前に感謝します!
entity-framework - エンティティ フレームワークは、削除 + 挿入を更新に置き換えます。オフにする方法
データベースの行を削除し、同じ ID で再度挿入したいのですが、ばかげているように聞こえますが、シナリオは次のとおりです。
ドメイン クラスは次のとおりです。
エンティティコンテキストは
これで、このコードを実行して要点を示すことができます (以下のコードにコメントで説明されています)。
更新の代わりに削除と挿入が行われるように、このエンティティの動作を変更する方法は?
c# - TPH を使用した Entity Framework での複数レベルの継承
Entity Framework を使用して、既存のレガシー データベース上に新しいプロジェクトで Heirachy データ モデルごとのテーブルを作成しています。これは、データベースを所有していないことを意味するため、OrderDiscount テーブルに列を追加しないソリューションが必要です。
私のデータモデルには次の構造があります。
具体的なタイプを区別するための既存の識別子列があります。呼び出されDiscountType
、値PercentageOffPromoDiscount
、FreeShippingPromoDiscount
またはを保持できますSaleDiscount
。
私のプロジェクトには次のマッピングがありますが、残念ながら機能していません。
私が見る例外は次のとおりです。
EntityTypes SellerOrderDiscountBase、SaleOrderDiscount、FreeShippingOrderDiscount、PercentageValueOrderDiscount は、テーブル OrderDiscountBase の同じ行にマップされています。マッピング条件を使用して、これらのタイプがマップされる行を区別できます。
古いバージョンの Entity Framework で 2 番目の識別子列を追加することでこの問題を解決している人を見てきましたが、前述したように、データベースを変更することはできません。
私が EF に求めていることは難しくないように思えるので、エンティティを正しく構成していないと思います。
c# - TPH テーブルからマスター リストを取得する方法
Code-First モデルに Table-Per-Hierarchy (TPH) 構造を使用しています。私は基本モデルの顧客を持っています:
私はいくつかのモデルが顧客を継承しています:
など..私が使用する住宅顧客のリストを取得するには:
マスター顧客リストをスーパーセットとして取得するにはどうすればよいですか? Customer で .ToList() 拡張メソッドを呼び出すと、期待どおり Id プロパティが返されます。SqlDataAdapter を使用すると、テーブルを返すことができます…</p>
私が本当に必要としているのは、ComboBox を埋めるための、データベースからの Customers テーブルの生のコンテンツだけです。EntityFramework のみを使用してよりクリーンな方法はありませんか?
c# - TPH 継承を使用した複数のテーブルへのエンティティ型のプロパティの EF マッピング
エンティティ タイプのプロパティをデータベース内の複数のテーブルにマッピングする (エンティティ分割)と同時に、階層ごとのテーブル (TPH) 継承のマッピングを使用したいので、モデル マッピング コードは次のとおりです。
次の基礎となるデータベース スキーマに基づきます。
ただし、EF がクエリを実行しようとすると:
次の例外メッセージがスローされます。
SQLプロファイルを実行すると、ディスクリミネーターが実際にあるテーブルではなく、テーブルのPersonType
値を持つフィールドで述語を使用しようとしているように見えます。C
dbo.Customer
dbo.Person
どちらか一方の機能、つまり継承のみまたは追加のテーブル マッピングのみを使用すると機能しますが、要件の一部が失われます。
私がやっていることは EF Fluent API で実行できますか?
御時間ありがとうございます。
c# - Discriminator 列名をカスタマイズする簡単な方法
ODP.NET経由でOracleでEF6を使用しています。そして、すべての db オブジェクトを大文字にする必要があります (変更できません)。
いくつかの規則を追加し、すべてのテーブル、列、外部キーなどを大文字にしました。2 つの TPH 階層に対して EF によって生成された Discriminator 列を除くすべて。
私の質問は、EF にこの列の名前を変更するように指示する方法です。私は構文の方法を知っていRequires(...).HasValue(...)
ますが、すべてのタイプ (および将来のすべての新しい階層) に識別子の値を指定したくありません。デフォルト値に満足しています。列自体の名前を変更したいだけです。