問題タブ [navigation-properties]
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.
entity-framework - 継承を使用したコレクション ナビゲーション プロパティ (タイプごとのテーブル)
Entity Framework の使用: コード まず、基本クラスのナビゲーション プロパティを使用してコレクション ナビゲーション プロパティを定義しようとしています。
オブジェクト構造:
コンテキスト OnModelCreating:
データベースが生成されると、Content テーブルで Author_UserID を使用する代わりに、Images テーブルに User_UserID 外部キー制約が作成されます。
ICollection<Image>
Content..Author_UserID フィールドをナビゲーション プロパティの外部キーとして認識させるにはどうすればよいですか?
asp.net-mvc - MVC ビューモデルとナビゲーション プロパティ
私はモデルを持っています:
汎用リポジトリ:
汎用リポジトリのインターフェース:
私のモデル固有のリポジトリ(ジェネリックを継承):
ビューモデルをビューにロードしているコントローラー:
そして最後に私の見解:
1つの例外を除いて、すべてがうまく機能しています。ビューには、訪問者 (VisitorLog) のリストが表示されます。ナビゲーション プロパティを使用すると、@item.Employees.EmployeeNameを使用するだけで、VisitorLog クラスの従業員 ID の代わりに表示する EmployeeName 値を取得できました。ただし、コントローラーのリポジトリ呼び出しで従業員名で検索できるようにしたい:
ただし、上記の例のEmployees.EmployeeNameは、「v」のリスト メンバーのオプションとして表示されません。
どんな助けでも大歓迎です。
asp.net-mvc - ASP.NET MVC Entity Framework - パラメーター モデルのナビゲーション プロパティにアクセスする
私は ASP.NET WebAPI を使用しており、コントローラーには と呼ばれるメソッドがありPostAddToGroup
、パラメーターint id
とGroup group
. 私のGroup
エンティティには、と呼ばれるナビゲーション プロパティがありますMembers
。
私がやりたいことは、このようなものです
それ以外の
これは可能ですか、そうでない場合、これを行うためのより良い方法はありますか?
entity-framework - 条件付きの子ナビゲーション プロパティの明示的な読み込み
EF5 で DBContext を使用する - 日付範囲などの基準に基づいてフィルター処理と部分的な読み込みを行った後。
私はオブジェクトの完全なグラフまたはツリーを作成しようとしています-Persons->Events where the only Events that are included are within a date range.
これはすべて、次のように取得する標準の変更追跡を維持しながら:
リストボックスとデータグリッドはどちらも適切なデータソースとしてバインドされています。POCO テンプレートは、ナビゲーション プロパティ クラス Events に INotifyProperty イベントを配置するように変更されました。
私はこれと何日も戦ってきましたが、遅延読み込みまたは明示的読み込みのどちらでフィルタリングしても機能しません。大量のブログ/チャパーを読んだ後、インクルードに関するかなり非現実的な制限に気づきました。代わりに、明示的な読み込みを試みています。私はDBContextの本を使用しています。
データベースからイベント データのサブセットのみを取得できないことは、100% 取引を妨げるものです。Entity Framework がこの機能をかなり明白にしていないということは、私にも私の上司にも理解できません。
私が試みたパスのいくつかを試して説明するために、コメント付きのコードを残しました。クラス自体は、このメソッドが属するリポジトリです。この質問をさらに編集して、多くのルートがあったため、試したルートの数を明確にします。View はリポジトリ レイヤーと ViewModel を使用するため、XAML 上のコード ビハインドはかなり最小限です。
よろしくお願いします。
注: コードを汚染するのではなく、PostSharp を介してログ記録/例外処理を使用しています。
以下は、以前のパスで生成したエラーの一部です。
エンティティ タイプ DbQuery`1 は、現在のコンテキストのモデルの一部ではありません。
インクルード パス式は、型で定義されたナビゲーション プロパティを参照する必要があります。参照ナビゲーション プロパティにはドット パスを使用し、コレクション ナビゲーション プロパティには Select 演算子を使用します。
パラメータ名: パス
タイプ 'System.Data.Entity.Infrastructure.DbQuery 1[VB$AnonymousType_0
2 [Entity.Person,Entity.Notes]]' のオブジェクトをタイプ 'System.Collections.ObjectModel.ObservableCollection`1[Entity.Person]' にキャストできません。
更新:私が試したさらに別のルートでも、これを飛ばすことはできません:
別のショット: Public Overridable ReadOnly Property FilteredPersons(startdate As Date, enddate As Date) As ObservableCollection(Of Person) Implements IPersonRepository.AllFiltered Get context.Persons.Load() Dim DateCriteria = Function(e) e.events.Where(Function( d) d.eventDateTime > startdate および d.eventDateTime < enddate)
与えます:
タイプ 'ObservableCollection(Of DailyNotes)' のパブリック メンバー 'Where' が見つかりません。
リストボックスに重複した名前がたくさん表示されるだけですが、ナビゲーションは実行され、日付基準は機能します。
これを試さないでください:)。子プロパティのみを選択するだけです。
この質問に私の他の試みを追加することで、他の両方の答えが促され、他の人が最初にこれに取り組むときに入ることができるサークルを見るのに役立つことを願っています!
entity-framework - 階層ごとのテーブルと継承された関係
.Net 4.5 を対象とする Entity Framework 5 を使用しています。私の人生では、階層ごとのテーブルとナビゲーション列を操作しようとしているときに、次のエラーを引き起こしている何が間違っているのかわかりません。
列名 'Game_Category' が無効です。
列名 'Game_Value' が無効です。
列名 'Type_Category' が無効です。
列名 'Type_Value' が無効です。
抽象基本クラスは次のとおりです (カテゴリと値の複合 PK に注意してください)。
追加の列を追加しない 2 つのサブクラスが続きます...
Game および SetType への Navigation プロパティを持つクラスを次に示します...
私のデータコンテキストから...
ルックアップ テーブルには、LookupType という名前の識別子列があります。テーブル/継承に関するいくつかのチュートリアルを読みました。他の 2 つ - 同様に構築されたオブジェクトを使用する TPT と TPC は簡単でした。上記のエラーは理解していますが、慣例により FK 列を探していることは理解していますが、何が間違っているか、または欠落していて、それらの列を探す原因になっているのかわかりません。GameId および TypeId プロパティに ForeignKey 属性を配置しようとしましたが、従属/主関係の制約に関するエラーが発生し、カテゴリを追加の外部キーとして指定する方法がわかりません。
ナビゲーション プロパティを使用しているときに、テーブル/継承に関するチュートリアルをまだ見つけていません。どんな助けでも大歓迎です.これは私を1時間以上夢中にさせています.
アップデート:
問題は、キーの一部としてのカテゴリの使用にあると思います。CardSet には、そのルックアップの「ゲーム」のカテゴリまたはそのルックアップの「セット タイプ」のカテゴリの 2 つのプロパティがありません。これらのプロパティを作成しようとしましたが、うまくいきませんでした。Fluent API を使用して設定することはできますか? 私はこれまでに何十回も試みましたが、運がありませんでした。
entity-framework - Automapper を使用して、DTO を参照エンティティを含む Entity Framework にマッピングします
Entity Framework 5 を使用して永続化される POCO ドメイン エンティティがあります。それらは、リポジトリ パターンを使用して DbContext から取得され、UoW パターンを介して RESTful MVC WebApi アプリケーションに公開されます。POCO エンティティはプロキシであり、遅延ロードされます。
エンティティをクライアントに送信する前に、エンティティを DTO に変換しています。これを行うために Automapper を使用していますが、Automapper がプロキシ POCO を DTO にマッピングし、ナビゲーション プロパティをそのまま維持することで問題なく動作しているようです。これには次のマッピングを使用しています。
ドメイン/DTO オブジェクトの例:
今、ネットワークから送り返された DTO を使用してコンテキストを更新しようとしています。ナビゲーション プロパティ/関連エンティティを適切に機能させるのに特定の問題があります。私が使用しているこのマッピングは次のとおりです。
上記の clientUow.Get() は DbContext.Set.Find() を参照するため、追跡されたプロキシ POCO オブジェクトを EF から取得しています (これには、プロキシとしても関連するすべてのエンティティが含まれています)。
私のコントローラーメソッドでは、次のことを行っています。
クライアントはプロキシ POCO オブジェクトとして正常にマップされますが、関連するエンティティ/ナビゲーション プロパティは、DTO からコピーされたプロパティ値を持つ新しい (非プロキシ) POCO エンティティに置き換えられます。
上記の uow.Update() は基本的に、私が持っている持続ロジックを実行する関数を指します:
上記は、関連するものは言うまでもなく、エンティティを永続化しても永続しません。マッピングのバリエーションと、デタッチ/状態を使用して永続化するさまざまな方法を試しましたが、常に「同じキーを持つオブジェクトが ObjectStateManager に既に存在します」という例外が発生します。
私は無数の他のスレッドを見てきましたが、Automapper ですべてを動作させることはできません。コンテキストからプロキシ オブジェクトを取得し、DTO からそれらを更新するプロパティを手動で調べることができますが、Automapper を使用してドメイン -> DTO をマップしています。私のドメイン オブジェクトにかなり似ています。
同時に更新する必要があるナビゲーション プロパティを持つドメイン オブジェクト/DTO を使用して、EF で Automapper を処理する教科書的な方法はありますか?
アップデート:
上記の永続化ロジックは、コンテキスト内の「ルート」EF プロキシ オブジェクトを更新しますが、関連するエンティティは更新されません。これは、それらが EF プロキシ オブジェクトではなく、単純なドメイン オブジェクトにマップされていることが原因であると推測しています。助けていただければ幸いです。
更新: 私が達成しようとしていることは、現在のバージョンの EF(5) を使用して実際には不可能であり、これは EF のコア制限であり、Automapper とは関係がないようです:
手動に戻ったと思います。これが同じことを考えている他の誰かに役立つことを願っています。
entity-framework - 外部キーを指定して EF のナビゲーション プロパティをプログラムで使用する
私のプロジェクトでは、EF with ADO.NET
. Entity Framework
次のクラスにいるとします
そして、私は持っていnavigation properties
ます:
- hasCategory: カテゴリ (Id) から製品 (CategoryId) へ、1 から多数へ
- hasType: Type(Id) から Product(TypeId) へ、1 から Many
したがって、製品の特定のカテゴリ名またはタイプ名にアクセスしたい場合 (コンテキストが与えられた場合):
プロパティ名があれば、プロパティを取得できます。
名前を取得するために、一致するナビゲーション プロパティ (または) を取得する方法があるかどうかを知りpropertyName
たいです。そうでなければ、2 つのクラスのどちらを探すべきかわかりません。hasCategory
hasType
Category
Type
asp.net-mvc-4 - 複合キーを使用した MVC4 ナビゲーション プロパティ
EF-database-first を使用して MVC4 Web アプリケーションを作成しました。テーブルには複合キー [ID, Name, EffDate] があり、データベースに定義された外部キーはありません: たとえば、Department 部分クラス:
部門メタデータ クラス:
Department テーブルを参照する Allocation テーブル。複合キー [DeptID、ProjectID、BillableUnitID、EffDate] もあります。できれば、DeptID フィールドを外部キーとして宣言しますが、データベースを制御することはできません。さらに重要なことに、T-SQL では外部キーを複合キーの一部にすることはできないと思います。
これは機能しますが、DeptID 番号の列を取得します。欲しいのは部署名の列です。
以前の質問で仮想ナビゲーション プロパティに誘導されたので、それらを追加しました。
Index の AllocationController のコードは次のとおりです。 public ActionResult Index() { return View(db.Allocation.Include(a => a.Department).ToList()); }
割り当てインデックス ビューへのリンクをクリックすると、次のエラー メッセージが表示されます (デバッグを停止した後)。
「/」アプリケーションでサーバー エラーが発生しました。
指定されたインクルード パスが無効です。EntityType 'KC_BillableUnit_TESTModel.Allocation' は、'Department' という名前のナビゲーション プロパティを宣言していません。
スタック トレース [InvalidOperationException: 指定されたインクルード パスが無効です。EntityType 'KC_BillableUnit_TESTModel.Allocation' は、'Department' という名前のナビゲーション プロパティを宣言していませ
ん
。 Objects.Internal.ObjectFullSpanRewriter..ctor(DbCommandTree tree, DbExpression toRewrite, Span span) +256 ....continues....
注釈のさまざまな組み合わせを試しましたが、すべて同じエラーになります。
割り当てリストに DeptID 番号の代わりに部門名を表示するにはどうすればよいですか?
.net - EntityFrameworkモデルの最初のナビゲーションプロパティの規則
既存のデータベースから「リバースエンジニアリング」されたedmxファイルでModel-FirstEntityFrameworkを使用しています。
ほとんどの場合、エンティティとナビゲーションプロパティは私の規則に基づいて自動的に検出されていますが、いくつかのナビゲーションプロパティが欠落しています。たとえば、次のようになります。
現時点Works.EditorUserID
では、への外部キーですが、EntityFrameworkは生成されたオブジェクトにナビゲーションプロパティをUsers.UserID
自動的に含めません。Editor
これを可能にする、データベースで使用できるより良い命名規則はありますか?
ありがとう
更新:
ナビゲーションプロパティが実際に作成されていることに気づきましたが、その名前はあまり役に立ちません。User
代わりにという名前のナビゲーションプロパティを作成していますEditor
。
.net - EntityFramework コレクションのプロパティにはセッターが必要ですか
EntityFramwork (Code First) で 1-n 関係をモデル化するための通常のアプローチは、次のような仮想コレクション プロパティを使用することです。
Remarks
コレクションは初期なのでnull
、次のアプローチを取ります
プロパティを明示的に設定する必要なく、Remarks.Add
新しく作成されたオブジェクトでメソッドを使用するため。Project
Afaik EF は私のクラスから内部的に派生し、遅延読み込みをサポートするために仮想ナビゲーション プロパティを上書きします。
私の質問:コレクション プロパティのセッターを定義する必要がありますか? EFはそれを必要としますか? ゲッターのみを公開し、クラスが内部でコレクションを管理できるようにしたいと考えています。
編集偶然にも、この関連する質問に気付いたのは、私の投稿の直後だけだったので、重複しているだけかもしれません...