問題タブ [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-4 - 最初にエンティティ フレームワーク コードでナビゲーション プロパティを使用する
環境:
- Code First、Entity Framework 4.3.1。
- ユーザー ---- トピック、1対多の関係。
User
withpublic virtual ICollection<Topic> CreatedTopics
Navigation プロパティ (遅延読み込み);Topic
public virtual User Creator
ナビゲーション プロパティを使用。DataServiceController : DbDataController<DefaultDbContext>
、Web API ベータ版、ASP.NET MVC 4 ベータ版、シングル ページ アプリケーション。- Json シリアライゼーション用の System.Json。
Web API アクション:
/li>結果: 「未処理の Microsoft .net フレームワーク例外が w3wp.exe で発生しました」
ここでの問題は次のように思われます:両方のエンティティにナビゲーション プロパティを追加CreatedTopics
するべきではありません (循環参照が原因ですか?)。また、クラスのナビゲーション プロパティを削除すると、User
再び OK になります。
したがって、上記のような同様のコンテキストで、ここに私の質問があります:
- 1 対多の関係でナビゲーション プロパティを処理する方法。
- さらに、多対多の関係はどうですか。それを 2 つの1 対多の関係に分割する必要がありますか。
- ナビゲーション プロパティを使用する際のベスト プラクティスと注意事項は何ですか?
私は多くの関連記事を読みましたが、まだ十分に明確ではありません:(、
助けてくれてありがとう!
ディーン
c# - EF でナビゲーション プロパティの親テーブルを参照する
私は基本的にFKを持つ3つのテーブルを持っています
作る
- MakeId
- MakeName
モデル
- モデル ID
- モデル名
- MakeId (外部キー)
車両
- 車両 ID
- 購入日
- モデル ID (外部キー)
データベースを変更せずに、Vehicle から Make へのナビゲーション プロパティが欲しい
私は試した:
ただし、これを行ったときに例外を受け取りました。
プロパティ式 'd => d.Model.MakeId' は無効です。式はプロパティを表す必要があります: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. 複数のプロパティを指定する場合は、匿名型を使用します: C#: 't => new { t.MyProperty1, t.MyProperty2 }' VB.Net: 'Function(t) New From { t.MyProperty1, t.MyProperty2 }'.
データベースに Vehicle.ModelId 列を追加せずに Make & Vehicle テーブルにナビゲーション プロパティを作成するにはどうすればよいですか?
c# - datetime がナビゲーション プロパティの読み込みを妨げるのはなぜですか?
SQL Server 2012 データベースに対して DbContext POCO アプローチを使用して、Entity Framework 4.3.1 を使用しています。
データベースには 2 つのテーブルしかなく、次のようになります。
注: データベースには外部キーがまったく指定されていません。モデルで関係を強制しているだけです (データベースを変更することはできません)。
それぞれに、次のような 1 行のデータがあります。
結合が機能することを確認するために、次のクエリを実行しました。
現在、次のエンティティがあります。
そして、これはコンテキストです:
このコードを実行するWhy is this printed?
と、コンソールに出力されます。ナビゲーション プロパティを入力する必要があることがわかります (明示的に含めていることもあります)。
さて、これは本当に奇妙なビットです。クラスDeliveryDate
からプロパティをコメントアウトするだけで、正常に機能します(コンソールに出力されます)。One
This is what I expect
ここで何が問題で、どうすれば解決できますか?
注:変数のDeliveryDate
プロパティを見るone
と、期待値に正しく設定されているため、日付はデータベースで問題なく、エンティティ フレームワークはそれを完全に具現化できます。
詳細情報: 日付であるという事実は問題ではありません - もしそうであれば、nvarchar はまだ失敗します - 単純なプロパティがすべてを失敗させるようです - これは私にはバグのように感じます...
entity-framework - EF Code First - 別のテーブルを指す複数のプロパティ
EF 4.1 の Code First でデータベースを生成する単純なクラスのペアがあります。
私のプログラムでは、いくつかのデータを作成して書き込みます。
Purchase レコードを読み返すと、 purchase.User が null であるという例外が発生することに注意してください。つまり、.Include はユーザーに対して何も取得しませんでした。ここで、OnModelCreating の salespersonUser ナビゲーション プロパティを無視すると (または単にコメントアウトすると):
コードは機能し、User は .Include にロードされます。
SalespersonUser nav プロパティを無視すると、作成されたデータベースは期待どおりに見えます。Purchase テーブルには PurchaseId、UserId、および SalespersonId があります。しかし、SalespersonUser nav プロパティを再度追加すると (無視しないでください)、テーブルには User_UserId と SalespersonUser_UserId (および元の UserId と SalespersonUserId) の 2 つのキーが追加されます。
また、生成された SQL は、問題が発生した場所を明確に示しています。
nav プロパティなし:
そして nav プロパティを使って:
UserId をプルする方法に注目してください。ただし、User_UserId と結合し、左結合も同様です。SalespersonUserId は結合でも参照されません。レコードを書き込んだ後のデータベース内では、UserId が設定されていますが、User_UserID は null です。したがって、参加するものはなく、Included User に対して null を取得します。
これは EF のバグのように思えますが、設計上の理由がある可能性があります。もしそうなら、誰かが私のためにそれを片付けて、おそらくそれを回避するかもしれないいくつかの流暢なAPIについて説明できますか? 私は自分のナビゲーション プロパティに少し偏っています。
c# - Entity Framework-ナビゲーションプロパティが選択されるのはなぜですか?
私は次のようなベースリポジトリを持っています:
User user = _usersRepository.Get().SingleOrDefault(u => u.Username == "gigi");
これにより、Rolesプロパティのないユーザーが返されます。これは問題ありません。User user = _usersRepository.Get(new string[] { "Roles" }).SingleOrDefault(u => u.Username == "gigi");
これにより、ユーザーとRolesプロパティが返されます。これは問題ありません。List<User> users = _usersRepository.Get().Where(u => u.Username.StartsWith("gi")).ToList();
List<User> users = _usersRepository.Get(new string[] { "Roles" }).Where(u => u.Username.StartsWith("gi")).ToList();
クエリ3と4はどちらも、Rolesプロパティを持つユーザーのリストを返します。クエリ3がロールを返すのはなぜですか?
LE:これは呼び出しです。コンテキストが破棄された後、ユーザーコレクションを調べます。
LE2:私は同じことを別々に行いました:
- /li>
- /li>
最初のケースではロールがロードされていませんが、2番目のケースでは問題ありません。
リポジトリのサンプルで何が間違っているのかわかりません。
LE3:これは作業単位です
entity-framework-5 - OnModelCreating のプロパティを無視する
Entity Framework 5.0 で Bounded (Db) Contexts を使用しようとしていますが、特定のコンテキストに含まれるクラスの 1 つからプロパティを除外する際に問題が発生しています。ここに情報があります(簡潔にするために短くします)
BaseContext.cs
IContext.cs
ISuiteContext.cs
SuiteContext.cs
Organizations.cs:
OrganizationConfiguration.cs:
使い方 (Web API Test Proj)
そして発生している例外:
ナビゲーション プロパティ 'Colors' は、タイプ 'Organizations' で宣言されたプロパティ タイプではありません。モデルから除外されていないこと、および有効なナビゲーション プロパティであることを確認してください
私が望むのは、「SuiteContext」が組織にアクセスできるようにすることだけですが、子 (色、およびその他のいくつか) にはアクセスできません。
私は何が欠けていますか?おそらく私は例外を間違って解釈していますか?
更新 #1
私は試しました(成功せずに-同じ例外):
アップデート #2
OrganizationsConfiguration.cs
クラスとHasMany()
メソッドに関係があるようです。を取り出すとHasMany(o => o.Colors)
、意図したとおりにクラス/プロパティを無視できます。ただし、これにより、データベースの作成が再作成時に失敗することもあります。もし私がそうしなかったらのろわれた!
entity-framework - ナビゲーションプロパティをADO.NETEntityFrameworkに保存する
私はADO.NETEntityFrameworkを使用しています。次のコードを使用して、データベースに「User」エンティティを追加します。
'user'クラスのCF属性は、'people'クラス属性への外部キーです。データベーステーブル'people'には、CF='xyz'のレコードがあります。メソッド'dbEntity.SaveChanges();'の場合 が実行されると、「user」データベーステーブルに新しいレコードが問題なく作成されます。問題は、「dbEntity.SaveChanges();」の実行後でも、ナビゲーションプロパティ「new_user.people」が「null」であるということです。正常ですか?
ありがとう!
asp.net-mvc - linq の ef ナビゲーション プロパティをエンティティに結合する方法
Linq to Entities で記述された次の SQL を取得しようとしています。
これがLinqでの私の試みです:
SheetCollection モデル:
私の図は次のようになります。
ナビゲーション プロパティと同等に機能しないことは理解しています。しかし、これを正しい方法で行うにはどうすればよいでしょうか。
entity-framework - EntityFrameworkPOCO-ナビゲーションプロパティが更新されない
EF4のpocoクラスに問題があります。
顧客エンティティへの外部キーを含む注文エンティティがあります。
したがって、OrderクラスにはCustomerタイプのナビゲーションプロパティがあります。
それはこのように見えます:
注文をロードすると、ナビゲーションプロパティの顧客は正しいのですが、CustomerIdプロパティが変更された場合、ナビゲーションプロパティは新しい顧客で更新されません。
EFコンテキストでDetectChanges()メソッドを呼び出すと、ナビゲーションプロパティが更新されます。
すべてのプロパティが仮想としてマークされていることを読みましたが、関係の同期は自動的に行われますが、ここではそうではありません。
どこで私は間違えましたか ?
助けてくれてありがとう
.net - .NET Entity Framework ナビゲーション プロパティを追加する方法
受信者とメーリングリストの間で多対多の関係を持つエンティティフレームワークを使用してデータベースモデルを作成しました。データベースを生成したとき、リンクテーブルへのアクセスは許可されませんでしたが、受信者のプロパティ-recipient.mailingListへのアクセスのみが許可されました。新しい受信者をデータベースに追加しようとして、新しい受信者を作成し、すべてのプロパティを正しく追加しました。チェックして動作しました。しかし、MailingList を Recipient に追加すると、「English translation: An entity object cannot be reference by multiple instances of IEntityChangeTracker.」というエラーが表示されました。以下のように MailingList を追加しました。
エラーの前に、newRecipient に mailingLists が追加されていることがわかります。MailingList を割り当てようとする前に、プログラムは問題なく newRecipient を追加しました。受信者にメーリング リストを追加する方法を誰か教えてもらえますか?