問題タブ [ef4-code-only]
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.
code-first - IQueryableからDbContextにアクセスする
Redisを利用する必要があるかもしれないキャッシュパターンを実装しようとしています。このパターンの問題は、Webファーム全体の問題を回避するために、Configuration.ProxyCreationEnabledを無効にしてから、後で再度有効にする必要があることです。
私がやりたいのは、IQueryableからDbContextにアクセスして、どこでもではなく1回だけこれを実行できるようにすることです。これを行う最も簡単な方法は、使用されているDbContextをキャッシュ拡張機能に渡すことですが、この投稿に出くわしました。
IQueryableの背後にあるDataContextにアクセスする
EF 4.1コードフィスト(DbSetなど)を使用して、上記のリンクと同様の方法でDbContextにアクセスする方法はありますか?
私はこれを自分で見つけようとしましたが、リフレクションを使用してIQueryableで参照されているDbSetから基本クラスを見つけるのに苦労しました。
entity-framework-4 - DbContext SaveChanges ステートメントの実行順序
Ordinal 列を持つテーブルに一意のインデックスを持つテーブルがあります。たとえば、テーブルには次の列があります。
TableId、ID1、ID2、序数
一意のインデックスは、ID1、ID2、序数の列にまたがっています。
私が抱えている問題は、データベースからレコードを削除するときに、序数を再配列して、再び連続するようにすることです。私の削除機能は次のようになります。
問題は、 Context.SaveChanges() を呼び出すと、ステートメントが渡された順序とは異なる順序で実行されるように見えるため、一意のインデックスが壊れることです。たとえば、次のことが起こります。
- 序数の並べ替え
- レコードを削除する
それ以外の:
- レコードを削除する
- 序数の並べ替え
これは EF の正しい動作ですか? もしそうなら、この動作をオーバーライドして実行順序を強制する方法はありますか?
うまく説明できていなかったら、教えてください...
entity-framework-4.1 - 複数のテーブルにエンティティを追加するには?
DB に 2 つのテーブルがあります:Students
とStudentsHistory
. アイデアは、テーブルのすべての変更がStudents
テーブルに新しいレコードを作成する必要があるということですStudentsHistory
(たとえば、学生を編集する場合、2 つの操作を実行する必要があります: Students の UPDATE と StudentsHistory の INSERT)。
2 つのクラスを作成してマップせずに、Entity Framework 4.1 Code-First でこれを行うにはどうすればよいですか? 私はStudent
クラスだけを持ち、どうにかして EF に Student オブジェクトを 2 つのテーブルに保存するように指示したいと考えています。
誰でも助けることができますか?
PS SQLトリガーなどを使用せずに、コードで実行する必要があります。
c# - エンティティ フレームワーク 4.1 コードが最初で、自動マッパーの問題
この単純なモデルとビューモデルのシナリオを考えてみましょう:
発生する問題は次のとおりです。
会社が不要な編集ページがあるため、データベースから取得しません。フォームが送信されたら、次のことを行います。
それから私は
そして問題は、oldCompany を会社に割り当てても、savechanges 後にデータベースでまだ null です。
ノート:
これらの行を変更すると:
これらに:
状態を 2 回変更したことに注意してください。正常に動作します。何が問題になる可能性がありますか? これは ef 4.1 のバグですか?
これは、この問題に対処するサンプル コンソール アプリケーションです。
entity-framework - 自動生成されたテーブルと列の名前にスペースを追加する EF 4.2 を停止する「データベース レベル」の方法はありますか?
コードのみの「モード」でEntity Framework 4.2を使用しています。モデルからデータベースを自動生成させます。
ただし、タイトルの大文字と小文字に基づいてテーブルと列の名前にスペースを追加しています。たとえば、CustomerOrder
クラスが[Customer Orders]
テーブルにマップされ、ProductNumber
プロパティが[Product Number]
フィールドにマップされています。
これが起こらないようにする方法はありますか? Fluent API を介してすべてのテーブルとプロパティ名を構成する方法を除いて (私はその方法を知っています)?
これは新しい 4.2 のものですか?
ef-code-first - クライアントでのEFコードのみの継承
(私の悪い英語でごめんなさい)
Silverlight 4 +RIAサービス+EF4コードのみのアプリケーションでは、DbContextに「IsActive」フィールドを含むクラスがいくつかあります。エンティティにこのフィールドがあるかどうかをクライアントから知り、取得したいと思います。私の最初の考えは、インターフェースを使用することでした。
これはサーバーでは正常に機能しますが、クライアントでは、RIAで生成されたコードにインターフェイスへの参照がないため、テストできません。クライアント側で、フィールドをif (obj is IHasActiveField)
使用して基本クラスから継承しようとした場合も同じことが起こります。IsActive
クラスData
は常にから継承しEntity
ます-おそらく、リフレクションを使用してフィールドが存在するかどうかを確認するか、すべてのタイプ(if (obj is Data)
)をテストすることができますが、よりエレガントな方法が可能であれば、それははるかに優れています:)
c# - WCF ベースのシナリオで EF 4.2 関連付けを管理する方法
私は、一連の Web サービスと通信してデータを取得するリッチ WPF クライアントで構成されるエンタープライズ アプリケーションに取り組んでいます。このデータは、Code First EF 4.2 で作成された POCO です。
私は今、頭を包み込もうとしているが、良い解決策を見つけることができなかった概念的な問題に直面しています。
1:n アソシエーション
したがって、データモデルは次のようになります。
サーバー側には、新しく作成された dtos (Children Collection の新しいアイテムを含む) をクライアント側から datacontext にアタッチして保存するインターフェイスがあります。もちろん、これは、これらのエンティティがクライアント側で作成され、追加のために送信された場合にのみ機能します。サービスは新しいエンティティを追加し、更新されたエンティティ (主に Id プロパティ) を返します。
ただし、既存のエンティティを取得しているときは、関連付けを編集できません (エンティティの追加または削除 - エンティティは固定サイズであるため)。したがって、これを可能にするためにインターフェイスを拡張する必要があります。
私にはそれは不器用なアプローチのように思え、インターフェースはどんどん大きくなっています。これは POCO と連携する洗練されたアプローチですか? どのようにしますか?
手動マッピングによる n:m アソシエーション
データモデルの別の部分は次のようになります。
クライアント側で ClassA と ClassB のインスタンスを作成し、バインディングを介して相互に追加しようとすると、コンテキスト内の Set に追加しようとするとエラーが発生します。このエラーは、Mappings プロパティからアイテムを削除することは許可されていないことを示しており、これがどこから来ているのか本当にわかりません。
2 番目の部分は説明が少し抽象的すぎるかもしれませんが、誰かがさらに情報を必要とする場合は、喜んで追加します!
PS: Selftracking Entities を提案しないでください。私はそれらについて知っていますが、純粋に EF 4.2 POCO に基づくソリューションに本当に興味があります。
PPS: コードはこのウィンドウに直接書き込まれ、実際に使用されるコードではないため、不足している可能性がありますが、それは私の質問のポイントではないので、それで十分であることを願っています.
ef4-code-only - 遅延読み込みが機能しない
EF Code first 4.1 の使用に問題があり、おそらく何かを理解していません。
私の理解では、リレーションシップ (コレクションまたは単一のオブジェクト) を仮想としてマークすることで、オンデマンドで遅延ロードされるため、次のようなことができます。
ただし、page.DepartmentId は正しく設定されています。さらに、 context.Entry(page).Reference(p => p.Department).Load() を使用して参照を手動でロードすることは機能しますが、オブジェクト モデルを持つことの全体的なポイントは、執拗にどこでもそれを行う必要がないことです。
コンテキスト OnModelCreating
もちろん、遅延読み込みを無効にしていません。
entity-framework - 最初にEF4.2コードを使用して変更をインターセプトしてログに記録する
私は監査追跡に関するいくつかの投稿や記事を読むのに時間を費やしましたが、それでもこれを理解することはできません。
私が必要としているのは、次のような結果をもたらす非常に基本的な監査システムです。
- 顧客「JohnDoe」は「User」によって削除されました
- 顧客「JaneDoe」は「他のユーザー」によって作成されました
- 「JohnDoe」からのアドレスが「User」によって変更されました
- 顧客「JaneDoe」は「他のユーザー」によって削除されました
dbContextでSaveChangesイベントをオーバーライドしようとしましたが、次の問題でスタックしました。
データベースでトリガーを使用してこれを実現できることはわかっていますが、SQL担当者ではなく、アプリケーションをデプロイした後はそれほど制御できないため、ここに保持して、より詳細に制御できるようにします。データベース上。
私はここで非常に単純な何かが欠けていると確信しています。助けていただければ幸いです。
前もって感謝します。