問題タブ [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.

0 投票する
1 に答える
930 参照

entity-framework - EF6 モデル ファーストと TPH 継承マッピング戦略

EF 6 で VS 2013 Premium を使用しており、階層ごとのテーブルで Model First を使用したいと考えています。役に立たない解決策を2時間以上探していました。

モデル デザイナーでは、選択肢として TPTしかありません。TPH は VS 2010 の「Entity Designer Database Generation Power Pack」に含まれているようですが、これは 2012 年には機能しないと読んだので、2013 年にも機能しないと思います。Code First TPH がデフォルトの継承戦略であることを見たので、TPH を使用して Code First プロジェクトを Model First に変換する答えはありますか? Model First と TPH は実行できますか? 私のオプションは何ですか?

0 投票する
1 に答える
1358 参照

c# - 特定のテーブル固有の列への派生プロパティの EF6 TPH マッピング

Customer エンティティを持つレガシー DB を、共有キーを持つ 3 つのテーブル (1-1) に分割します。Code First TPH を使用し、それを分割テーブルにマップしたいと考えていました。以下は単純化されたクラス階層です (多数のプリミティブ プロパティとそのマッピングは省略されています)。

そして、これを3つのテーブルにマッピングしようとする方法は次のとおりです。

しかし、PrivateName と CompanyName を目的のテーブルの目的の列に手動でマップする方法がわかりません。それは可能ですか?ありがとう。

0 投票する
1 に答える
823 参照

entity-framework - TPH 識別子が基本クラス/テーブルにない

Entity Framework v6.1.1 での TPH 継承の識別子に問題があります。

弁別子は、基本クラスを代表するテーブルに配置されるはずです。ただし、EF は識別子列を派生クラスにマップされたテーブルにマップしようとしているようです。

例えば

私も既存のスキーマを使用しています-つまり:

ただし、新しいスタッフを追加しようとすると、次の例外が発生します。

'System.Data.SqlClient.SqlException : 値 NULL を列 'PersonTypeId'、テーブル 'MyDb.dbo.Person' に挿入できません。列はヌルを許可しません。INSERT は失敗します。ステートメントは終了されました'

派生テーブルに識別子を (誤って) 挿入しようとしているようです。誰かが助けてくれることを願っています。

0 投票する
0 に答える
148 参照

entity-framework - サブクラスでの TPH Simple Config / Discriminator の問題

Oracle データ プロバイダーおよび TPH 用の DotConnect で Code first EF 6.1 を使用しています。2 つのサブクラスを持つ 1 つのクラスを作成しました。既存のデータベース テーブルにレコードを追加しようとしています。しかし、変更を保存しようとすると、DbUpdateException がスローされます。

例外: {"ORA-06550: 行 4、列 298:\nPL/SQL: ORA-00904: \"Discriminator\": 無効な識別子\nORA-06550: 行 4、列 1:\nPL/SQL: SQL ステートメントは無視されました"}

これが私のコードです:

Person.cs :-----------------

PersonEntityModel.cs -------------------

最後の 2 行がない場合、例外がスローされます: {"ORA-06550: 行 4、列 298:\nPL/SQL: ORA-00904: \"Discriminator\": 無効な識別子\nORA-06550: 行 4、列 1: \nPL/SQL: SQL ステートメントは無視されました"}

最後の 2 行で、次の例外がスローされます: {"ORA-06550: 行 4、列 298:\nPL/SQL: ORA-00904: \"TYPE\": 無効な識別子\nORA-06550: 行 4、列 1: \nPL/SQL: SQL ステートメントは無視されました"}

私はTPHを初めて使用します。上記の問題を解決するにはどうすればよいですか?

また、TPHについて読むのに良い記事を送ってください。このhttp://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tphを読みました。

あなたの助けに感謝、

0 投票する
1 に答える
473 参照

entity-framework - Entity Framework - Null データベース フィールドを使用した TPH 継承

同じ基本クラスから継承する 2 つのサブクラスがあります。それらはすべて同じテーブルにマップされます。db テーブルの field1 が null で、field2 が null でない場合、それは 1 つのサブクラスです。field1 が null ではなく、field 2 が null の場合、それは他のサブクラスです。

エラーが発生し続けます。実際のメッセージは、「無効な列名 'Discriminator'」です。それは実際には Discriminator と言っています...私はそれを一般的な用語として入れませんでした。

これが私のコードのサンプルです:

これを正しくマッピングするにはどうすればよいですか?

0 投票する
0 に答える
425 参照

c# - エンティティ フレームワーク tph マッピング プロパティの複数の条件

エンティティ フレームワーク 6 コードの最初のパターンを実装する Web アプリケーションを開発しています。私のプロジェクトでは、何らかの理由で TPH、TPT、および TPC パターンを使用してテーブルの継承を既に行っていますが、現在、次のような問題があります。

1)いくつかのプロパティを持つベーステーブル table 1 を作成しました。これらのいくつかは、継承タイプを識別するための「キー」列です

この例のように、独立したエンティティのいくつかのプロパティにこのベース テーブルを実装する必要があります。

理想的な実装は、すべてのエンティティに同じクラス (エンティティ) とテーブルを使用でき、マッピングで指定することです。エンティティ キー値で。同じ TableName と ItemId および値 'Ref2' の ColumnName を持つ列 Table1Ref2 など.

このソリューションを実装することは可能ですか?

0 投票する
0 に答える
111 参照

asp.net-mvc - ASP.NET-MVC の TPH 継承階層用に 1 つまたは複数のビューとコントローラーを作成できますか?

Entity Framework (ASP.NET-MVC コンテキストでも) を使用した継承に関する記事をたくさん読んだことがありますが、誰もがデータベース側の問題について書いていますが、問題のビュー側については誰も取り上げていません。

モデルクラスを取得しました:

そして保持する dbContext には次のものが含まれます。

追加の質問: dbContext にも保持する必要がありpublic DbSet<Employee> Employees { get; set; }ますか?

ここで、Controllers ディレクトリをクリックして右クリックし、次のように [Add Controller] をクリックします。

ここに画像の説明を入力

結果は、クラスのインデックス、詳細、作成、削除、編集アクションでコントローラーを取得していますPerson

Personsあるものを含むすべてがリストEmployeesに表示されIndex.cshtmlます。Details.cshtmlビューでは、従業員は表示Salaryされません。Edit.cshtmlビューでは、従業員Salaryは編集できません (表示されません) 。さらに アクションはxorを編集したかどうかに応じてPOST Editバインドできません(できますか?) 。これは予測できた可能性があり、明らかですが、これをどのように解決しますか?SalaryPersonEmployee

主な質問:

タイプごとに 1 つのコントローラーを作成する必要がPersonありEmployeeますか?

タイプごとに 1 つの詳細、作成、削除、編集ビューを作成する必要がありますか、または 1 つだけを作成して、それらのビュー内で表示/編集/作成するオブジェクトのタイプをチェックする必要がありますか? POST Editアクションメソッドでバインディングを解決する方法を1つのコントローラーにするとしますか?

また、右の詳細、作成、削除、編集ビューに移動するときに、オブジェクトの両方で構成されるリストを含む1 つのインデックス ページがある場合、ビューでどのタイプのオブジェクトがリストにあるかをチェックする方法は?PersonEmployee

私の頭に浮かぶ例示的な解決策:ビューとアクションのほかに、すべてのビューを含む2つのコントローラーPersonControllerを作成します。次に、index.cshtml のリスト内のオブジェクトのタイプに基づいて、さまざまなビューが表示されます。EmployeeControllerIndexEmployeeController

0 投票する
0 に答える
203 参照

sql-server - Entity Framework 6のTPH基本クラスから派生したTPTエンティティ?

最初に SQL データベースにマップされた EF6 データベースを使用しているプロジェクトがあります。これはすべて新しいため、EF モデルとデータベース スキーマを制御します。

現在、簡単にするために Vehicle と呼ぶテーブルがあります。Discriminator 列を使用して、サブクラスの Entities Car および Truck を取得します。これはすべてうまくいきます。

次に、「ソフト削除」を実行して、削除された車両を VehicleHistory テーブルに移動する必要があります。(EFでこれを試した後、おそらくSQLトランザクションを使用します)。これはレビュー可能にする必要があるため、この履歴テーブルもマップする必要がありますが、他のクラスで簡単に再利用できるように継承階層内に保持したいと考えています。

私のアイデアは、共有列の Vehicle への FK を持つ 'vehiclecurrent' および 'vehiclehistory' テーブルを作成することでした。次に、EF で TPT を使用して、TPH クラスから派生した「carcurrent」、「carhistory」などを取得します (たとえば、carhistory->car->vehicle)。これは機能せず、エラー 3034 が表示されます:「異なるキーを持つエンティティが同じ行にマップされています」

だから私の質問は、基本的にどうやってこれをやってのけることができますか? このアプローチはどのように機能しますか、またはこれを達成する別の方法はありますか? ありがとう!

0 投票する
1 に答える
252 参照

c# - TPH と多対多の関係

こんにちは、TPH 継承を使用して、同様の構成可能な項目を確立しています。私の TPH モデルは次のとおりです。

次に、注文エンティティを持つ子エンティティとの多対多および 1、1 対多/多対 1 の関係を作成する必要があります。

  • オーダーに多くの WindowType があります
  • オーダーに多くの WallType があります
  • 注文に多数の屋根タイプがあります
  • オーダーには 1 つのルーフサイズがあります
  • オーダーには 1 つの DoorSize があります
  • オーダーには 1 つの GardenSize があります

ただし、これは、RoofTypes、WallTypes などの多対多の関係を生成しません... public virtual ICollection Orders{get;set;} が継承されると想定していました。上記の継承されたクラスを多対多および 1 対多の順序で確立するにはどうすればよいでしょうか?