問題タブ [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.
c# - 自己参照ナビゲーションプロパティとjsonシリアル化
ユーザーを公開するWebAPIがあります。
各ユーザーには、ユーザーでもあるマネージャーがいます。
私のEDMXには、「user」エンティティに自己1 .. *ナビゲーションプロパティがあります。これは、マネージャーからユーザーへのナビゲーション用の「コラボレーター」であり、ユーザーからマネージャーへのナビゲーション用の「マネージャー」です。
私のJSONAPIは、NewtonJSONを使用してエンティティをシリアル化します。
API呼び出しのJSON結果をカスタマイズするために、クエリ文字列にキーワード「fields」を実装しました。「フィールド」を使用すると、ユーザーの部分的なJSON表現を取得できるようになります。
呼び出しは次のようになります:/ api / users?fields = id、name、department、picture
そして、完全なC#ユーザーオブジェクトから、id、name、department、およびpictureプロパティのみを含むJSONを取得します。
IContractResolverのカスタム実装を使用してこれを達成しました。
問題は、NewtonJSONコントラクトリゾルバーが「オブジェクトごと」ではなく「タイプごと」に機能することです。つまり、宣言型のそのようなメンバーを別のメンバーではなくシリアル化するようにシリアライザーに指示できますが、それを指示することはできません(私の知る限り、それが私がここで尋ねる理由です)同じタイプのこのオブジェクトのそのようなメンバーをシリアル化し、同じタイプの別のオブジェクトの同じメンバーではありません。
そうは言っても、私の問題は私が尋ねるときです:/ api / users?fields = id、name、manager
次のように、各ユーザーオブジェクトのマネージャーメンバーの再帰的なシリアル化で応答を受け取ります。
次のように、部分的なサブエンティティの応答を要求する機能も実装しました。
/api/users?fields=id,name,manager.id
ただし、メインオブジェクト(ここではユーザー)とサブオブジェクト(マネージャー)が両方とも同じタイプであるため、機能していません。
部分応答WebAPIを実装するためにNewtonJSONをすでに使用している人はいますか?埋め込まれた自己タイプエンティティをどのように操作しますか?
アドバイスありがとうございます。
ef-code-first - EntityFramework5-インターフェイスタイプを使用して最初の配列ナビゲーションプロパティを1対多でコーディングします
これらは私のクラスです:
このCommentConfigurationをOnModelCreate()に追加すると、次のようになります。
プロパティCommentsが常にnullである理由と、EFが仮想であるために初期化しない理由を本当に理解できません。遅延読み込みも無効にしようとしましたがcontext.Post.Include("Comments")
、エラーのあるナビゲーションプロパティを読み込もうとすると、「コメントというナビゲーションプロパティがありません」と表示されます。そこで、Entity Framework Power Tools Beta 3を使用してエンティティデータモデルを確認しましたが、2つのテーブルの間に関係があり、コメントテーブルの終わりもある場合でも、テーブル「Post」のナビゲーションの終わりがないことがわかりました。
どちらを向いたらいいのかわからないのですが、アレイの問題かもしれませんね?Icollectionプロパティを使用する必要がありますか?Postはインターフェイスを実装しているため、そのプロパティのタイプを変更することはできませんが。
私が見ているすべてのサンプルは明確で、簡単に作業できます。助けてください..よろしくお願いします。
編集:
これは、昨日投稿したリンクを見て変更したものです。
例外は次のとおりですSystem.ObjectDisposedException :The ObjectContext instance has been disposed and can no longer be used for operations that require a connection
。アプリケーションがコメントを取得しようとすると発生します。キーを削除するvirtual
と例外は消えますが、プロパティは常にnullのままであり、値はまったく保持されません。
EDITv2 新しいプロパティを追加する問題を解決し、古いプロパティをそれにマップしました。
PostConfiguration OnModelCreate()では、ListCommentsプロパティを次のようなナビゲーションプロパティとして使用しました。
これで完全に機能し、予想よりも単純でした。コメントコレクションを受信しようとすると、「ListComments」プロパティを含めると、Postの配列が取得されます。ご協力ありがとうございました!
entity-framework - EntityFramework+リポジトリパターンと外部キーの更新が関連エンティティを更新しない
EntityFramework5とUnitOfWork+リポジトリパターンを使用しています。
次のエンティティを作成しようとしています。
IdViaggioにデータを入力する新しいViaggioAttivitaエンティティを作成すると、
ナビゲーションプロパティattivita.Viaggioは更新されません。
Idの代わりにattivita.Viaggioを直接更新した場合
もちろんViaggioは更新されますが、IdViaggioキーも更新されます。
私は何が欠けていますか?
なぜ私はこの違いを得るのですか?
.Save()を呼び出してみましたが、何も変わりません。
エンティティを手動で更新した場合にのみリレーションが更新されるようですが、キーのみを更新した場合はリレーションは更新されません。
ありがとうございました
編集1:
私はSQLServer2008、MVC3、Entity Framework 5(もちろんランタイムv4.0.30319)を使用しています。データベースファーストモード。2つのテーブルには関係があります(もちろん、そうでない場合は、2番目の方法を使用してキーにデータを入力しません)。
編集2:
私はいくつかのEDMX情報を貼り付けようとしています。
c# - 遅延読み込みと複数の参照
私のデータベースには、Ref_Type ナビゲーション プロパティ (および TypeID を参照する FK) を持つエンティティ テーブルが設定されています。Type テーブルには、Ref_Department と同じ FK セットアップがあります。最後に、Department テーブルには Ref_Locale と同じ FK セットアップがあります。
シングルトンのプロパティであるリストにエンティティを保存します。次のように作成されます。
これで問題ありません。ナビゲーション プロパティはすべて読み込まれ、どのプロパティにもアクセスできます。次のようにエンティティエントリを更新すると問題が発生します。
Ref_Entity は適切にロードされますが、Ref_Entity 内で Ref_Department は単に null になります。db.Entities.ToList<Entities>();
サイコロなしで、コンストラクターのように使用してみました。ご覧のとおり、LazyLoading をオフにしてみました (実際にフラグを適用するには、SaveChanges() を呼び出す必要があると思いました)。私も .Include("Ref_Department") を試しましたが、エンティティには存在しないと不平を言うだけで、これは理にかなっています。
UpdateEntity メソッドに渡す newEnt には初期化された Ref_Type がありません。UpdateEntity メソッドで変更されていないものはそのままであるという前提で作業しています...
だから今、私は何が起こっているのか、そしてそれを修正する方法について少し途方に暮れています. 誰かが私が間違っている場所を説明したり、コードを修正して機能させる方法についていくつかの指針を教えてくれたりできれば、それは素晴らしいことです.
asp.net-mvc - ASP.NETMVC4ナビゲーション仮想プロパティがアクション後のデータに入力されない
質問の作成ビューでDropDownListを手動で作成している質問クラスにナビゲーションプロパティ(カテゴリ)があり、作成アクションを投稿すると、カテゴリナビゲーションプロパティがモデルに入力されないため、無効なModelState。
これが私のモデルです:
CreateのGETアクションとPOSTアクションの両方に対する私の質問コントローラーは次のとおりです。
そして、これが質問の作成ビューです
ビューにドロップダウンリストを生成する次のバリエーションを試しました。
POSTアクションでQuestionオブジェクトをクイックウォッチすると、Categoryプロパティはnullになりますが、プロパティのCategoryIdフィールドはビューで選択したCategoryに設定されます。
ビューから取得したCategoryId値を使用して、EFでカテゴリを手動でフェッチするコードを簡単に追加できることを知っています。これを行うためのカスタムバインダーを作成することもできると思いますが、これがデータアノテーションを使用して実行できることを望んでいました。
私は何かが足りないのですか?
ナビゲーションプロパティのドロップダウンリストを生成するためのより良い方法はありますか?
手動で行うことなく、MVCにナビゲーションプロパティを設定する方法を知らせる方法はありますか?
- 編集:
違いが生じる場合は、質問を作成/保存するときに実際のナビゲーションプロパティをロードする必要はありません。必要なのは、CategoryIdをデータベースに正しく保存することだけです。これは発生しません。
ありがとう
asp.net-mvc - Entity Framework データベースの更新: 外部キー参照が無効な列 (ナビゲーション プロパティ)
これは単純なはずです。
クライアントとプロジェクトがあります:
すべて正常に動作しています。Projects テーブルには、関係を格納する Client_ClientID というフィールドがあります。
ここで、プロジェクトのナビゲーション プロパティをクライアントに追加します。
Update-Database を実行すると、次のエラーが表示されます。
詳細な SQL は次のように表示されます。
制約を追加する前に、Client_ClientID の名前を Client_ClientID1 に変更しようとしている理由がわかりません - 奇妙に思えますか?
私は何を間違えていますか?
entity-framework - 汎用リポジトリを使用したEntityFrameworkの遅延読み込み
私の現在のプロジェクトでは、汎用リポジトリインターフェイスを使用しています。
例として、Get
メソッドは次のようになります。
ここdb
で、はEntityFrameworkのを拡張する私のデータコンテキストのインスタンスDbContext
です。IDisposable
作業単位パターンのスコープブロックで使用したり、変更をコミットする前に最後まで待機したり、その前に問題が発生した場合に全体を破棄したりできるように、すべてが実装されています。
このインターフェイスは、ビジネスロジックをデータアクセスから完全に分離するために、より複雑なクエリを処理するためにロジックレイヤーによって使用されます。したがって、そのレイヤーへのクエリは次のようになります。
(はい、それは凝縮できることを理解しています。それはアプリにありますが、たとえば、これはより明確です。)
私の問題は、オブジェクトのセットを返すことがあり、後でそれが参照するもののいくつかに到達したいと思うかもしれないということです。たとえば、製品を表示する場合、ディスプレイは次のようにします。
(HTMLの品質は無視してください。これも簡単な例です)
問題は、Entity Frameworkの遅延読み込みで、クエリからエンティティを返すときにこれらのプロパティがnullのままになると、エラーがスローされることです。今、私はそのInclude()
方法を知っていますが、私のリポジトリが一般的である場合、それらを適用することは困難です。完全にオフにすることもできますが、EFは、必要のないときに膨大なリンクされたコレクションの取得を開始します。モデルの構造と監査ログへのリンクは、EFからのリンクが多いことを意味します。従う。
少しスマートな方法で遅延読み込みできる方法はありますか?特定のクエリに子オブジェクトを含めるように具体的に要求できるように、子オブジェクトも取得するようなメソッド.Single()
と.Where()
を呼び出すことができるメソッドはありますか?DbSet
c# - Entity Framework Code First ナビゲーション プロパティを使用した ASP.Net MVC
Service
次のようなエンティティがあります。
カテゴリは、データベースで使用可能なカテゴリの ID と名前を保持するドロップダウンからユーザーが選択します。ViewModel はその ID を返して保存します。私がこれまで行ってきた方法は、リポジトリに移動し、id がビューで選択したカテゴリと一致するカテゴリ オブジェクトを取得してから割り当てることです。もちろん、これにはデータベースへの往復が必要です。
私はすでにIDを持っているので、データベースに行かない場所でこれを行うより良い方法はありますか?
entity-framework - 新しい切断されたエンティティの既存のナビゲーション プロパティの読み込み
新しい切断された POCO があります (私の場合は aspnet mvc modelbinder から)。
外部キー プロパティ ( CategoryId
) は既存のデータベース値に設定されていますが、ナビゲーション参照 ( Category
) は最初は null です。ナビゲーション参照をロードする正しい方法は何ですか? ステップ1は、新しいオブジェクトをコンテキストに追加することだと思います。それから の前にSaveChanges
、遅延読み込みを使用できますかLoadProperty
、それとも手動で設定する必要がありますか?