問題タブ [dbcontext]
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.
visual-studio - Microsoft.Data.Entity.Design、Version = 10.0.0.0は、Visual Studio DeveloperPreview11用です。
私はここで何かを試みていますが、失敗し続けます。
Visual StudioDeveloperPreviewをWindowsServer2008R2にインストールしています。ご存知のように、今のところVS拡張機能はVS 11 Dev Previewと互換性がありませんが、回避策を見つけました。
VisualStudioExtensionsおよびVisualStudio11Dev。プレビュー
VS11にADO.NETC#DbContext Generatorをインストールしましたが、コード生成を実行しようとすると、次のエラーが発生します。
エラー:このテンプレートは、コンポーネントアセンブリ'Microsoft.Data.Entity.Design、Version = 10.0.0.0、Culture = neutral、PublicKeyToken=b03f5f7f11d50a3a'を読み込もうとしました。この問題とこのテンプレートを有効にする方法の詳細については、プロジェクトテンプレートのカスタマイズに関するドキュメントを参照してください。
参照の追加ページから確認しましたが、上記のようなdllはありません。
VS11Devでこの作業を行うことができる可能性があります。プレビュー?
entity-framework-4.1 - Entity Framework 4.1 Database Firstは、DbContextT4で生成されたクラスに主キーを追加しません
Entity Framework 4.1を使い始めたばかりで、「データベースファースト」モードを試しています。EFが「ADO.NetDbContextGenerator」を使用してモデルクラスを生成する場合、[Key]属性を使用してクラスの主キーを識別すべきではありませんか?これがないと、T4MVCScaffoldingと互換性がないように見えます。
詳細は次のとおりです。
Entity Data Model Designer GUIを使用して、既存のデータベースからモデルに単純な「国」テーブルを追加しました。GUIは、「PK」という名前の単一の整数IDキーフィールドを主キーとして正しく識別します。(残念ながら、私は新しいユーザーなので、スクリーンショットを追加できません。代わりにCSDLを以下に含めました。)ただし、EFが「ADO.NetDbContext Generator」を使用してコードを生成する場合、PKは識別されません。生成されたクラスのキーフィールドとしてのフィールド(以下のコードの抜粋を参照)。
「国」テーブルのCSDL:
自動生成されたコードは次のとおりです。
これにより、MVCScaffoldingT4テンプレートを使用してコントローラーをスキャフォールディングしようとすると問題が発生します。「主キーのように見えるプロパティはありません」というエラーが表示されます。NuGetパッケージマネージャーコンソールからのコマンドと出力は次のとおりです。
ただし、生成されたクラスを手動で変更して[Key]属性をフィールドに追加すると、上記とまったく同じスキャフォールディングコマンドが正常に機能します。
では、なぜEFDatabaseFirstとT4MVCScaffoldingが一緒にうまく機能しないのでしょうか。そして、足場の問題がなくても、EFクラスはキーフィールドが何であるかを知る必要はありませんか?
entity-framework - ライブラリを ObjectContext から DbContext に変換する
Entity Framework を使用してデータ アクセスの周りにファサードを非常に簡単にラップできるライブラリ (古いブログ投稿にあるコードに基づく) があります。それは ObjectContext を使用しており、私の目的には十分に機能しています。
しかし今、私たちは最初に DbContext を使用してコードを調査することに興奮しており、もちろん既存の取り組みを可能な限り再利用/適応させたいと考えています。
次のエラーが発生したときに、ファサードを利用しようとするまで、IObjectContextAdapter を使用してファサードを有効にするライブラリを単純に変換するだけで、すべてがうまくいきました。
型 'Employee' は、ジェネリック型またはメソッド 'DbContextManagement.FacadeBase' の型パラメーター 'TEntity' として使用できません。「Employee」から「System.Data.Objects.DataClasses.EntityObject」への暗黙的な参照変換はありません
MSDN は次のように述べています。
EntityObject 派生型は DbContext API ではサポートされていません。これらのエンティティ型を使用するには、ObjectContext API を使用する必要があります。
それは問題ありませんが、この不可能性を回避するためにリファクタリングを完了するにはどうすればよいでしょうか?
ここにいくつかのコードがあります(改行が導入されています):
FacadeBase.cs
EmployeeFacade.cs
Employee.cs
entity-framework - EF経由で挿入した後に自動IDキーを取得する
Entity Framework 4.1を介してレコードを追加するときに、DBの自動生成された主キーを取得する簡単な方法はありますか?
例えば:
SQLに相当するものは次のとおりです。
ところで、私はMySQLを使用していますが、SQLはMSSQLと同じです
c# - エンティティへのlinqのfindメソッドについて混乱しています。第 3 レベルの子へのアクセス
これは私にとって非常に重要なので、こんにちは。次のテーブル構造があるとします。
次のコードは、find メソッドを使用して特定の MvrMeds にデータを挿入します。find メソッドは主キー PKMvrMedsId を検索し、次に示すようにテーブルを関連付けます。
しかし、Mvrs テーブルをどのように使用して上記と同じ挿入を行うのか疑問に思っています。
私の最初の試み
2 回目の試行
そして、これを過度に複雑にすることなくこれにアプローチする方法がわからないことを知っています.
asp.net-mvc-3 - カスタムメンバーシップ+Ninject+ InRequestScope=ObjectContextインスタンスが破棄されました
ObjectContextインスタンスはInRequestScopeに破棄されました!
私は問題を解決するためにウェブ上で数時間試しました。
ObjectContextインスタンスは破棄され、接続を必要とする操作には使用できなくなりました。
この、これ、これ、これのような同じ問題を持ついくつかの記事や投稿を見つけました
いろいろ試してみましたが、いつもエラーが発生します。
コード
コンテクスト
注入する
リポジトリ
、、のProjectImageRepository
場合AddressRepository
、実装は同じモデルに従います。RoleRepository
UserRepository
スコープはリクエストであるため、Ninjectはリクエストの最後にオブジェクトを破棄する必要があります。ただし、状況によっては、リクエストを確定する前に破棄が発生します。
試み
問題がカスタムメンバーシップに関連しているかどうかはわかりませんが、いくつかのテストを行いました。次のとおりです。
注入する
したがって、これ以上のエラーはありません!
しかし、別の問題が発生します!repository
およびcontext
はシングルトンオブジェクトであるため、更新されません。
たとえば、プロジェクトに新しいアドレスを登録しても、コレクションproject.Addresses
は更新されません。
注:アドレスは問題なくデータベースに登録されています!
entity-framework - Entity FrameworkでContextオブジェクトへの参照を作成する方法とDBContextオブジェクトを操作する方法は?
私が取り組んでいるプロジェクトがあります。DBContext ジェネレーターで Entity Framework を使用することにしました (持続性を認識しないオブジェクトを保持するため)。現在、いくつかの問題が発生しています。
ソリューションを設定する方法は次のとおりです。
解決策:
- MyProject (私の Web アプリ プロジェクト)
- BusinessObjects (プロジェクト) には、すべてのオブジェクト (エンティティ) を含む myproject.tt ファイルが含まれています。それぞれが個別の .cs ファイルにあります。
- DataAccess (プロジェクト) には、myproject.edmx、myproject.Context.tt ファイルが含まれています
これが私の質問です:(私はこれらすべてに慣れていません)
オブジェクト (エンティティ) Job があり、このオブジェクトに対して select、insert、update、および delete メソッドを定義したいとします。どこでそれを行うのですか?BusinessObjects プロジェクト内にフォルダ Custom (すべてのカスタマイズを配置する場所) を作成しようとしました。次に、そこでメソッドを定義したかったのですが、ctx (コンテキスト) オブジェクトの新しいインスタンスを作成する方法がわかりません。
これが私のコードです:
表示されるエラー メッセージは、BestGigEntities が名前空間に存在しないというものです。BestGigEntities は BusinessObjects に存在するはずですが、BusinessObject プロジェクトからアクセスしようとするとなぜか表示されません。しかし、メインの Web プロジェクトから見ることができます。myproject.Context.tt では、Custom Tool Namespace として BusinessObjects を指定しています。なぜ私はそれを見ることができないのですか?
myproject.Context.cs ファイルを確認したところ、
すべて問題ないようです。すべての参照を適切に追加したとほぼ確信しています。これらのメソッドを間違った場所で定義しようとしているのかもしれません。
BestGigEntities は私の Web プロジェクトから見ることができ、そこから使用できます。
どんな助けでも大歓迎です。
asp.net-mvc-3 - EF Code First から EDM ビューを生成する
Entity Framework Code First を使用してデータベースを作成したところ、すべてうまく機能しています。ただし、エンティティのスキーマを見たいです。最初にコードから EDMX を生成するのとほとんど同じですが、何もする必要はありません。これを行うにはどうすればいいですか?それ用のナゲットパッケージがあると聞きましたが、見つかりません。助けてくれてありがとう!
entity-framework-4.1 - Entity Framework 4.2 - データベースで生成された主キー値で TPT 継承を実現する方法は?
次のシナリオで EF (4.2) を使用したいと考えています。
- 既にデータベースが存在し (データベース優先のアプローチを選択したため)、それは SQL Anywhere DB です。
- 持続性を無視するビジネス オブジェクトを使用したいので、
DbContext
テンプレートを使用POCO
して EDM からクラスを生成します。 - 私のエンティティには、単純な継承階層が 1 つあります。抽象ベース エンティティと 2 つの具体的な派生エンティティです。
- データベースには、継承階層のタイプごとに 1 つのテーブルがあります (Table-Per-Type Strategy)。
- これら 3 つのテーブルにはそれぞれ主キー列 (
Id
、タイプ:integer
) があり、具体的なエンティティと基本エンティティの関連付けは、Id
両方のテーブルに同じものを含めることによって行われます (つまりId
、具体的なタイプ テーブルの主キー ( )同時にベーステーブルへの外部キーです;かなり一般的なアプローチだと思います)。
EDM アシスタントは自動的に認識しないため、デザイナーで継承を手動で定義する必要がありました。つまり、記述されたエンティティ間に継承の関連付けが必要です。
ここまで大きな問題はありませんでした。ここで、当面の問題について説明します。私が使用するデータベースには制限があります。Primarykey
値は、データベース関数を使用して、データベースによって生成される必要があります。before-insert-trigger
で定義されたでこの関数を呼び出したいですbase-table
。
値がデータベースによって生成されたことをエンティティ フレームワークに知らせるために、のプロパティのプロパティを設定しますStoreGeneratedPattern
(理解したように、これは、エンティティの新しいインスタンスを挿入した後に生成された値を取得するように EF に指示する方法です) )。Id
base-entity
Identity
派生エンティティの新しいインスタンスを作成し、それを対応する に追加しDbSet
てコンテキストDbContext
を呼び出すと、制約に違反していることを示す a がスローされます。DBのリクエストログを確認すると、ベースエンティティがベーステーブルに挿入されていることがわかりますが、派生テーブルに行を挿入すると、明らかに新しく生成されたのを使用していないため、上記のエラーが発生しますベース テーブルの新しいエントリ。SaveChanges
DbUpdateException
foreignkey
Id
それに対してデータベースレベルでできることはあまりないと思うので、質問は、EDMまたはDbContextを構成(または変更)してベース行を最初に挿入し、次に生成されたものを取得しId
て使用できるかどうかです。派生行の挿入。
この状況を回避するにはいくつかの方法があることを知っています (継承を使用しない、ストアド プロシージャを使用して新しい派生エンティティを挿入する、id 生成 db 関数を呼び出してエンティティにId
自分でプロパティを挿入して設定する) が、現時点では上記の動作が最も好ましいので、「プランB」を決定する前に何かを見落とさないようにしたい.
このトピックに関する提案は大歓迎です。よろしくお願いします。
トリガーのコードは次のとおりです。
関数 "F_GET_NEW_ID" がトリガーで呼び出され、ベース テーブルの新しいエントリの新しい ID が生成されます。これには 2 つのパラメーターがあります: "Tablename" -> 新しい ID を生成する必要があるテーブルの名前、およびデータベースのすべてのテーブルの standardcolumn の値を取る 2 番目のパラメーター (新しい ID を生成するために必要です) )。
linq - Entity Framework(4.2)HasRequiredにより、予期しないLEFTOUTERJOINが発生します
Entity Framework(NuGetの最新バージョン)は、最初に定義されたもの以外のナビゲーションプロパティの結合を構築するときに、HasRequired構成を無視している可能性があります。
たとえば、次の構成のPOCOオブジェクト(Person)があるとします。
次のクエリで人のリストを読み込もうとしています。
Entity Frameworkは、次のクエリを生成します。
* The_Addresses *テーブルへの結合は(予想どおり)内部結合ですが、*The_Work_Places*への後続の結合は外部結合であることに注意してください。AddressプロパティとWorkPlaceプロパティの両方が必須としてマークされていることを考えると、両方の結合が内部結合であると予想されます。また、AddressプロパティとWorkPlaceプロパティをRequired属性でマークしようとしましたが、効果がありませんでした。
これはバグですか、それとも私は何かを誤って構成していますか?提案?