問題タブ [entity-framework-4.3.1]
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# - Entity Framework - 遅延読み込みは失敗しますが、熱心な読み込みは問題ありません - 修正/デバッグする方法は?
SQL Server 2012データベースに対してエンティティフレームワーク4.3.1を使用しており、これらのテーブルを含むデータベースがあります(他にもありますが、関連するビットは以下にあります):
次のコード スニペットを実行しています。
NOOOOOOOしか印刷されません。
そのため、遅延読み込みは機能していないようですが、熱心な読み込みは機能しています。
このシナリオで何がうまくいかなかったのか、一体どのようにデバッグできますか(これが失敗する可能性のある原因は何ですか-私にはEFのバグのように感じますが、それを宣言することを延期し、蒸し暑い山全体を捨てています窓の)?2番目のものが正常に機能していれば、構成は確かにOKです...?
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 - Entity Framework 4.3.1 Table Per Type Code First は、SQL Server Express 2008 と SQL Server 2008R2 で異なるスキーマを生成します
私はEF CodeFirstを使用して、TPTテーブルを含む非常に大きなスキーマを生成しています。
私は SQL Server Express 2008 のインストールに対して開発を行ってきましたが、これによりテーブルが完全に生成されます。つまり、Money テーブルを参照する ReplacementCharged_Id 列を持つ ReplacementRentalDongles テーブルが生成されます。
ただし、SQL Server 2008R2 Developer インスタンスを使用して同じコードを実行すると、生成されるテーブルが異なります。この場合、ReplacementCharged_Id 列は最終的に「ベース」テーブル BaseConstraint に生成されます。
これは EF 4.3.1 のバグですか? SQL Server のバージョンが異なると、最終的に別のスキーマが作成されますか? EF は SQL 2008R2 と互換性がありますか?
asp.net-mvc-3 - コントローラに注入される依存性の数を減らす方法
私はMVC3、Entity Framework v4.3 Code First、およびSimpleInjectorを使用しています。私はこのように見えるいくつかの簡単なクラスを持っています:
次のような別のエンティティがあります。
各Thingy(現在)には、次のような独自のManagerクラスがあります。
その結果、私のMainControllerは次のようになります。
実際には、このコントローラーには2倍の数の依存関係が注入されています。臭い。すべてまたはほとんど同じ依存関係を持つOtherControllerがあることも知っていると、匂いはさらに悪化します。リファクタリングしたい。
私はすでにDIについて十分に知っているので、プロパティインジェクションとサービスロケーターは良いアイデアではありません。
MainControllerは単一の画面であるため、これらすべてを表示して、1つの[保存]ボタンをクリックするだけで編集できるようにする必要があるため、MainControllerを分割できません。言い換えれば、単一の投稿アクションメソッドはすべてを保存します(ただし、それが単一の[保存]ボタンである限り、それが理にかなっている場合は変更してもかまいません)。この画面はKnockoutjsで構築されており、違いが生じる場合はAjaxの投稿とともに保存されます。
私はアンビエントコンテキストの使用をユーモアを交えましたが、それが正しい方法であるとは確信していません。私はファサードを注入することの使用もユーモアを交えました。また、この時点でコマンドアーキテクチャを実装する必要があるかどうかも疑問に思っています。(上記のすべてが匂いを別の場所に移動するだけではありませんか?)
最後に、おそらく上記の3つのアプローチとは関係なく、代わりに、GetAThings()、GetAThing(id)、GetBThings()、GetBThing(id)などの明示的なメソッドを持つLookupManagerを1つ持つ必要がありますか?(ただし、そのLookupManagerには、いくつかのリポジトリー、または新しいタイプのリポジトリーを挿入する必要があります。)
私の考えはさておき、私の質問は、繰り返しますが、このコードをリファクタリングして、注入された依存性の狂った数を減らすための良い方法は何ですか?
.net - EF4.3.1およびEF5.0DbSet.Localは、実際のデータベースクエリよりも低速です
約16,500の都市のテーブルを含むデータベースと、そのデータベースのEFデータモデル(データベースファースト)があります。私はそれらをコードでメモリにプリロードします:
...次に、それらを使用するときは、次の各クエリを試しました。
最初のクエリは高速(〜10ms)ですが、2番目のクエリは最初の実行に約2.3秒かかります(ただし、その後に呼び出されたときの最初のクエリよりも高速です)。
SQL Server Profilerは、最初のクエリが別のマシンのデータベースにヒットしていることを確認しますが、2番目のクエリはそうではないため、これは意味がありません。
をオフDb.Configuration.AutoDetectChangesEnabled
にして、ビューを事前に生成してみました。
速くするために何ができ.Local
ますか?(このアプリケーションを実行しているすべてのクライアントが高速LAN上にあるわけではありません。)
c# - Entity Framework 4.3.1-> 5.0例外:「EntityTypeにはキーが定義されていません。このEntityTypeのキーを定義してください。」
Entity Framework 4.3.1では、次のモデルがあり、それらは正常に機能しました。
EF 5.0にアップグレードした後、このアプリケーションを実行して関連するDbContextにアクセスしようとすると、次の例外が発生します。
この問題を解決するにはどうすればよいですか?これはリグレッションのようです。
c# - SaveChangesの後にEntity Frameworkが関係を「修正」するのを止めることは可能ですか?
Entity Framework 4.3.1 から (偶然にも、.NET 4 に対して Visual Studio 2010 でビルドされた ASP .NET MVC 3 Web アプリケーションから) この例外が発生しています。
System.InvalidOperationException: データベースへの変更は正常にコミットされましたが、オブジェクト コンテキストの更新中にエラーが発生しました。ObjectContext が矛盾した状態にある可能性があります。内部例外メッセージ: オブジェクトをオブジェクト コンテキストに追加できません。オブジェクトの EntityKey には、オブジェクトが既に別の関係に参加していることを示す ObjectStateEntry があります。
私はいくつかのグーグルを行い、これにたどり着きました(msdnで):
保存時の InvalidOperationException
その中で、Jeff Derstadt(受け入れられた回答)は次のように述べています。
次に SaveChanges を呼び出すと、コンテキストは変更を保持し、状態エントリの修正を試みます。これを行うと、一時的な EntityKey を完全な EntityKey に変換する「キーの修正」が実行されます。この場合、一時キー TKP2 は P2 のキーと等しくなります。コンテキストは、状態マネージャーのキー エントリを完全なエンティティ エントリに「昇格」させようとし、その過程でグラフを修正します。P1.Spouse = P2 であるため、P2.Spouse は P1 である必要がありますが、追加された項目があったため、P2.Spouse は既に P3 に等しく、EntityReference は複数の値を持つことはできません。
私はここで少し「汚い」方法で考えているので、私の質問はこれです...
保存変更後のオブジェクト グラフがどのように見えるかはあまり気にしないため (つまり、要求が終了したため、とにかく破棄されます)、データが挿入されました (SQL Server でそれを見ると、実際には完全に問題ありません)。デバッガーで続行した後) - Entity Framework にこの手順を実行しないように指示する方法はありますか (したがって、この例外を取得せず、おそらく少し時間も節約できます)?
entity-framework - EntityFramework-オブジェクトコンテキストの閉鎖
いくつかのEntityFrameworkアプリケーションのプロファイリングにEFProfiler(絶対に素晴らしいツールBTW!)を使用した後、ほとんどの場合、すべてのオブジェクトコンテキストが閉じられていないようです。
たとえば、ローカルで実行した後、EF Profilerは、326個のオブジェクトコンテキストが開かれているのに、1つだけが閉じられていると教えてくれました。
だから私の質問は、これについて心配する必要がありますか?それとも、Entity Framework内に自己完結型ですか?
entity-framework - Entity Framework 4.3.1 で重複挿入を回避する方法
コードファーストアプローチを使用して作成された小さなモデルがあります-City
都市名に関する情報のみを含むクラスです。
Post
クラスは、郵便番号と都市参照の組み合わせを表します
両方のエンティティには、構成としてコンテキストで定義されたセットがあります
オブジェクトを取得または作成して呼び出し元に返す静的メソッドを持つオブジェクトを操作するためのクラスを作成しました。
メソッドを呼び出すと想像してください
メソッドGetCity
が開始され、存在しない場合、メソッドは を作成してからメソッドをcity
呼び出しますSaveChanges()
。
返されたcity
エンティティを新しいPost
インスタンスに設定すると、Entity Framework は同じcity
.
この動作を回避するにはどうすればよいですか? 前のステップで参照された作成またはロードされた新しいpost
エンティティのみを挿入したい。city
c# - EntityFramework dbContextを使用して、別のテーブルのカウントを持つレコードを取得する
私は最初にEntityFramework4.3.1とデータベースをdbcontextで使用しています。
顧客と注文の間に1対多の関係がある顧客と注文 の 2つのテーブルが あるとします。
EntityFrameworkを使用して実行し、さまざまなWebページの特定の情報を取得するクエリが2つあります。
1つ目は 、特定の日付以降に注文したすべての顧客を取得することです。
したがって、このクエリのプレーンSQLは次のようになります。
EntityFrameworkでこれを行う方法がわかりません。
私は次のコードから始めましたが、ここからどこに行くべきかわかりません。
(c.Order.OrderDate> someDate)を実行しようとしましたが、EntityFrameworkがOrderをコレクションとして処理しているため、OrderからOrderDateプロパティを取得できないため、これは機能しません。
2番目の問題は次のとおりです。 特定のコレクションまたは顧客の注文の総数を取得する
このクエリのプレーンSQLは次のようになります。
繰り返しますが、EntityFrameworkでこれを行う方法がわかりません。OrderテーブルからCustomerIDとCustomerIDのレコードの総数のみを取得するにはどうすればよいですか?各顧客のすべての注文レコードを返すだけではないように、groupbyを実行する方法がわかりません。
----------------------------------
更新:Eliからのフィードバック後の最終的なコードは次のとおりです。
特定の日付以降に作成された注文を持つ顧客を取得するには:
特定の顧客コレクション内の各顧客の注文の総数を取得するには、次のようにします。
上記から、コレクションを反復処理して、匿名タイプから値を取得できます。