タグ付けされた質問 「entity-framework-4」

ADO.NET Entity Framework 4.xのタグ、それ自体が.NETフレームワークのオブジェクトリレーショナルマッピングです。

4
Entity Framework 4-AddObjectとAttach
私は最近Entity Framework 4を使用していて、ObjectSet.AttachとObjectSet.AddObjectをいつ使用するかについて少し混乱しています。 私の理解から: エンティティがシステムにすでに存在する場合は、「アタッチ」を使用します 新しいエンティティを作成するときに「AddObject」を使用します したがって、新しいPersonを作成する場合は、これを行います。 var ctx = new MyEntities(); var newPerson = new Person { Name = "Joe Bloggs" }; ctx.Persons.AddObject(newPerson); ctx.SaveChanges(); 既存のPersonを変更する場合は、次のようにします。 var ctx = new MyEntities(); var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name = "Joe Bloggs" }; existingPerson.Name = "Joe Briggs"; ctx.SaveChanges(); これは非常に簡単な例です。実際には、Pure POCO(コード生成なし)、リポジトリパターン(ctx.Personsを扱わない)、および作業単位(ctx.SaveChangesを扱わない)を使用しています。しかし、「カバーの下」では、上記は私の実装で何が起こるかです。 さて、私の質問 -私はAttachを使用しなければならなかったシナリオをまだ見つけていません。 …

6
EFコードファースト:nugetパッケージコンソールから「EntityValidationErrors」プロパティを表示するにはどうすればよいですか?
私はこれで途方に暮れています: エンティティフレームワーク(4.1.3)のコードを最初に使用するためのクラスを定義しました。シードを始めるまでは、すべてが順調でした(テーブルを作成していたなど)。 今私が行うとき Add-Migration "remigrate" ; Update-Database; パッケージコンソールで「1つ以上のエンティティの検証に失敗しました。詳細については、「EntityValidationErrors」プロパティを参照してください。」というエラーが表示されます。 Seed()メソッドにブレークポイントがありますが、プロジェクトが実行されていないときにコンソールでこれを実行しているため、詳細に到達する方法については無知です(PS-スレッドの検証が失敗したことを確認しましたEntity Frameworkを使用してSQL Serverデータベースへの変更を保存している間に1つ以上のエンティティが表示され、プロパティの表示方法が示されます。) Seed()メソッドに問題があることは知っています。メソッド呼び出しの直後にreturnを置くと、エラーがなくなるためです。では、検証エラーを確認できるようにブレークポイントを設定するにはどうすればよいですか?ちょっと負けました。または、nugetコンソールでそれをトレースする他の方法はありますか?

6
Entity Framework 4 Single()vs First()vs FirstOrDefault()
単一のアイテムをクエリするためのさまざまな方法の比較と、それぞれをいつ使用するかについて、時間の悪魔がいます。 誰かがこれらすべてを比較するリンクを持っていますか、またはなぜあなたが他のものを使うのかについての簡単な説明がありますか?私が知らないオペレーターがまだいますか? ありがとうございました。

5
Entity Frameworkの接続文字列を編集するにはどうすればよいですか?
最近、app.configファイルを編集して、Entity Frameworkデータモデル(.edmxファイル)の接続文字列を変更する必要がありました。しかし、知りたいのですが、デザイナーを使用してEF接続文字列を編集する方法はありますか? 元の接続文字列は、エンティティデータモデルウィザードによって自動生成されます。その場合、接続文字列は変更できません。.edmxデザイナーのプロパティウィンドウで無効のままになります。(app.configで)できる限り手動でXMLを編集することを避けたいので、元のウィザード画面に戻って接続文字列を変更し、ツールにapp.configファイルを編集させる方法があるかどうか疑問に思いました私のために。

2
Entity Framework-ナビゲーションプロパティを手動で追加
データベースからEntity Framework Model(4.0)を生成しました。データベースを設計しておらず、スキーマを制御できませんが、外部キー制約が定義されていないテーブルがいくつかありますが、暗黙的な関係が定義されています。 例えば: 次の列を持つPeopleというテーブルがあります。GenderIDRaceID GenderとRaceの両方のテーブルがありますが、Peopleテーブルには外部キーがありません。 モデルをインポートしたときに、これらの関係のナビゲーションプロパティが追加されませんでした。手動で追加しようとしましたが、From RoleとTo Roleが無効になっています。自分で関係を追加する方法がわかりません。どうすればよいですか?



2
Entity Frameworkデータコンテキストを読み取り専用にする方法
Entity Framework Data Contextをサードパーティのプラグインに公開する必要があります。目的は、これらのプラグインがデータのみをフェッチできるようにし、挿入、更新、削除、またはその他のデータベース変更コマンドを発行できないようにすることです。したがって、データコンテキストまたはエンティティを読み取り専用にするにはどうすればよいですか。

5
EF4 POCOオブジェクトの変更を保存するときに関係を更新する
Entity Framework 4、POCOオブジェクト、およびASP.Net MVC2。私は多対多の関係を持っています。BlogPostエンティティとTagエンティティの間で言いましょう。つまり、T4で生成されたPOCO BlogPostクラスでは、 public virtual ICollection<Tag> Tags { // getter and setter with the magic FixupCollection } private ICollection<Tag> _tags; ObjectPostのインスタンスからBlogPostおよび関連するタグを要求し、それを別のレイヤー(MVCアプリケーションで表示)に送信します。後で、プロパティと関係が変更された、更新されたBlogPostを取得します。たとえば、タグ「A」、「B」、「C」があり、新しいタグは「C」、「D」です。私の特定の例では、新しいタグはなく、タグのプロパティは変更されないため、保存する必要があるのは変更された関係のみです。これを別のObjectContextに保存する必要があります。(更新:同じコンテキストインスタンスで実行しようとしましたが、失敗しました。) 問題:関係を適切に保存することができません。私は見つけたすべてを試しました: Controller.UpdateModelおよびController.TryUpdateModelが機能しません。 コンテキストから古いBlogPostを取得してから、コレクションを変更しても機能しません。(次のポイントとは異なる方法で) これはおそらく機能しますが、これが解決策ではなく単なる回避策であることを願っています:(。 可能なすべての組み合わせでBlogPostやタグのAttach / Add / ChangeObjectState関数を試してみました。失敗しました。 これは私が必要としているように見えますが、機能しません(私はそれを修正しようとしましたが、私の問題には対応できません)。 ChangeState / Add / Attach / ...を試みましたが、コンテキストの関係オブジェクトです。失敗しました。 「機能しない」とは、ほとんどの場合、エラーが発生せず、少なくともBlogPostのプロパティが保存されるまで、特定の「ソリューション」に取り組んだことを意味します。リレーションシップで何が発生するかは異なります。通常、新しいPKを使用してタグがタグテーブルに再度追加され、保存されたBlogPostはそれらを参照し、元のPKを参照しません。もちろん、返されたタグにはPKがあり、保存/更新メソッドの前にPKをチェックします。それらはデータベース内のものと等しいため、EFはおそらくそれらを新しいオブジェクトであり、それらのPKは一時的なものであると考えています。 私が知っている問題で、自動化された簡単な解決策を見つけることが不可能になる可能性があります。POCOオブジェクトのコレクションが変更されると、FixupCollectionトリックが反対側の逆参照を更新するため、上記の仮想コレクションプロパティによって発生するはずです。多対多の関係の。ただし、ビューが更新されたBlogPostオブジェクトを「返す」場合、それは起こりませんでした。これは、おそらく私の問題に対する簡単な解決策はないことを意味しますが、それは私を非常に悲しくし、EF4-POCO-MVCの勝利を憎みます:(。これは、EFがMVC環境でこれを行うことができないことを意味しますEF4オブジェクトタイプが使用されます:(。スナップショットベースの変更追跡では、変更されたBlogPostが既存のPKのタグとの関係を持っていることがわかるはずです。 ところで、私は1対多の関係でも同じ問題が発生すると思います(Googleと私の同僚はそう言っています)。私はそれを自宅で試してみるつもりですが、それがうまくいくとしても、私のアプリでの6つの多対多の関係で私を助けません:(。

15
エンティティフレームワーク-無効な列名 '* _ID'
これをコードファーストとデータベースファーストEF間の問題に絞り込みましたが、どのように修正すればよいかわかりません。私はできる限り明確になるように努力しますが、正直に言うと、私自身、理解の一部が欠けています。これはEntity Framework 4.4です Entity Frameworkが使用されているプロジェクトを継承しましたが、実際のファイルの多くが削除され、実際に戻る方法がありませんでした。私はEF(最初にデータベース)を再度追加し、プロジェクトが構築されたT4セットアップを複製しました。すべてのデータベースモデルのコードバージョンとDBContextコードファイルを生成しました。 接続文字列が "通常の" .NET接続文字列のように見える場合、無効な列名 "ProcessState_ID"が存在しないというエラーが表示されます。ProcessState_IDはコードベースにはまったく含まれていません。EDMXファイルなどには含まれていません。これは、クエリの一部の自動EF変換のようです。 接続文字列をEntity Frameworkモデルと一致させると、うまく機能します。 次に、前のコードをEntity Frameworkと一致させるために、「通常の」.NET接続文字列を維持したいと思います。 したがって、ここで2つの質問があります。1.コードで通常の接続文字列からEF接続文字列に移動するための良い方法は何ですか?2.ここに、無効な列名エラーを停止するために表示されない別の修正がありますか?

5
EDMXモデルで特定のテーブルをすばやく見つけるにはどうすればよいですか?
ダイアグラムをスクロールして検索するよりも、EDMXモデルでテーブルを見つけるためのより速い方法を誰かが知っているのではないかと思っていました。私たちのデータベースには約50のテーブルがあり、特定のテーブルを探しているとき、VSがどこに配置するかを確認するのは面倒です。 この質問のためにVS 2010を使用しています。 前もって感謝します。

13
ReferentialConstraintの依存プロパティは、ストアによって生成された列にマップされます
データベースに書き込むときにこのエラーが発生します。 ReferentialConstraintの依存プロパティは、ストアによって生成された列にマップされます。列:「PaymentId」。 public bool PayForItem(int terminalId, double paymentAmount, eNums.MasterCategoryEnum mastercategoryEnum, int CategoryId, int CategoryItemId) { using (var dbEntities = new DatabaseAccess.Schema.EntityModel()) { int pinnumber = 0; long pinid = 1; //getPinId(terminalId,ref pinnumber) ; var payment = new DatabaseAccess.Schema.Payment(); payment.CategoryId = CategoryId; payment.ItemCategoryId = CategoryItemId; payment.PaymentAmount = (decimal)paymentAmount; payment.TerminalId = terminalId; …

15
このエラーが発生する理由:次のEntitySet / AssociationSet-Entity1にマッピングが指定されていません。
Entity Framework 4をModel Firstアプローチで使用しています。 私はプロジェクトを開始し、エンティティを設計し、データベースを生成しました。すべてがうまくいきました。 次に、戻ってモデルに別のエンティティを追加する必要がありました。ただし、エンティティをEDMXにドラッグすると、次のエラーが発生します。 よし!Entity1をテーブルにマップする必要があるだけです。私はModel Firstアプローチを使用していますが、DDLを生成するときにテーブルが作成されることを期待しています。 このエラーを回避するにはどうすればよいですか?

3
Entity Framework 4のIncludeとラムダ式の使用
この問題を克服する方法について、CTP4に関連する記事や、独自の拡張メソッドを追加する記事をたくさん見ました。 include内でラムダ式を使用する "公式の" EF4組み込みの方法はありますか(最初のレベルの関係と2番目以上のレベルの両方)、または最終的にRTMに含まれなくなりましたか? それが1つあります。コードでラムダ式を(#system.data.entity#system.data.linqを使用して)使用しても、次のようになるため、その方法を学ぶことができればうれしいです。 ラムダ式はデリゲート型ではないため、 'string'型に変換できません: var customers = from c in context.Customers.Include(c=>c.Phone)

5
リポジトリを削減してルートを集約する
現在、データベース内のほぼすべてのテーブルのリポジトリがあり、それらを集約ルートのみに縮小することで、DDDとさらに整合させたいと考えています。 次のテーブルがあると仮定しましょう。 UserとPhone。各ユーザーは1つ以上の電話を持っている可能性があります。集約ルートの概念がなければ、私は次のようなことをするかもしれません: //assuming I have the userId in session for example and I want to update a phone number List<Phone> phones = PhoneRepository.GetPhoneNumberByUserId(userId); phones[0].Number = “911”; PhoneRepository.Update(phones[0]); 集合根の概念は、実際よりも紙の上で理解する方が簡単です。ユーザーに属していない電話番号を取得することは決してないので、PhoneRepositoryを廃止し、電話関連のメソッドをUserRepositoryに組み込むことは理にかなっていますか?答えが「はい」であると仮定して、前のコードサンプルを書き直します。 UserRepositoryに電話番号を返すメソッドを設定することはできますか?または、常にユーザーへの参照を返し、ユーザーを介して関係をトラバースして電話番号に到達する必要があります。 List<Phone> phones = UserRepository.GetPhoneNumbers(userId); // Or User user = UserRepository.GetUserWithPhoneNumbers(userId); //this method will join to Phone どちらの方法で電話を入手したとしても、そのうちの1つを変更したとすると、どうすれば更新できますか?私の限られた理解は、ルートの下のオブジェクトはルートを介して更新する必要があるということです。これにより、以下の選択肢1に進むことができます。これはEntityFrameworkで完全に機能しますが、コードを読んでいると、Entity Frameworkがグラフ内の変更されたオブジェクトを監視しているにもかかわらず、実際に何を更新しているのかわからないため、これは非常にわかりにくいようです。 UserRepository.Update(user); // …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.