問題タブ [ef-model-builder]
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.
asp.net - モデル ビルダーはもう 1 列追加しますか?
最初に EF コードを使用します。
それは私のモデルビルダーです
および状態クラス:
および市場クラス:
もちろん、余分なコードは削除します。
問題は、このコードを使用すると、State_StateId 列がデータベースの Market テーブルに追加され、modelbuilder を使用しないと、メッセージ ループ コードでエラーが発生し、... (余分なコードを削除すると言います)、どうすればよいかということです。この「State_StateId」余分な列を使用せずに、最初にコードを使用します。
下手な英作文ですみません。
entity-framework - DbModelBuilder と .HasRequired() を modelBuilder に追加できません
API 内で ModelBuilder を作成しようとしていますが.HasRequired()
、コードに追加できないようです。これは 内に住んでいるという事実によるものだとDBModelBuilder
思いますが、それも追加できません。
の使用のみを許可しますModelBuilder
。それ以外の場合、エラーがスローされます。OnModelCreating(DbModelBuilder): no suitable method found to override
ここで何か不足していますか?
私の DbContext は次のようになります。
アップデート
(テストとして) 新しいプロジェクトをゼロから開始しました。Web API テンプレートを使用して新しい ASP.NET 5.0 プロジェクトを作成しました。すぐに私のプロジェクトは認識しませんDbModelBuilder
。EntityFramework.dll への参照を追加しましたが、まだうまくいきません。次に追加using System.Data.Entity;
して受け入れましDbModelBuilder
たが、名前空間 'DbModelBuilder' が見つからなかったとまだ不平を言っています。
まったく新しいプロジェクトでこのエラーを事前に発生させる方法がわかりませんか?
NuGet からパッケージ Entity Framework を追加しようとするとすぐに、バージョン 6.1.3 は DNX Core 5.0 と互換性がないというエラーがさらに表示されます。
これらのエラーの例/解決策が見つからないようです。
更新 2
EntityFramework.dll 参照を DNX Core 5.0 アセンブリと DNX 4.5.1 アセンブリに追加することで、DbModelBuilder を認識させることができましたが、System.Core の追加と mscorlib を求めるエラーがさらにスローされました。(単純だと思っていた) Web API プロジェクトを作成するのがどれほど大変なことか、本当に信じられません。
c# - EntityTypeConfiguration クラスを実装した後、ASP.NET MVC + EF スキャフォールディングを使用できますか?
バックグラウンド
Entity Framework にバインドされた新しい ASP.NET MVC コントローラーの Visual Studio スキャフォールディングは、モデルがデータ注釈またはモデル内の直接的な行を使用OnModelCreating(DbModelBuilder)
してその特性を記述する場合にうまく機能します。
問題
ただし、このシナリオでは、のコンテンツは個々のクラスOnModelCreating
を使用してリファクタリングされます。EntityTypeConfiguration<T>
MVC+EF スキャフォールディングを使用して新しいコントローラーを作成しようとすると、次のポップアップ エラーが発生します。
選択したコード ジェネレーターの実行中にエラーが発生しました: 'タイプ SomeModelClass の構成は既に追加されています。既存の構成を参照するには、
Entity<T>()
またはComplexType<T>()
メソッドを使用します。
修正はありますか (例: カスタム コードまたはプロジェクト構成)?
entity-framework-core - EF7 プロパティ ビルダーの拡張メソッド「Has...」と「ForSqlServerHas...」の違いは何ですか?
Entity Framework 7 (Entity Framework Core) には、2 つの異なる拡張メソッド セットがありますPropertyBuilder
。最初は「一般的な」セットのようです:
- HasDefaultValueSql
- HasColumnName
- HasColumnType
- HasComputedColumnSql
- HasDefaultValue
次に、「ForSqlServer」に一致するセットがあります。
- ForSqlServerHasDefaultValueSql
- ForSqlServerHasColumnName
- ForSqlServerHasColumnType
- ForSqlServerHasComputedColumnSql
- ForSqlServerHasDefaultValue
また、「汎用」対応のない「ForSqlServer」拡張メソッドが 1 つ追加されているようです。
- ForSqlServerUseSequenceHiLo
2 つのグループの違いは何ですか? また、いつどちらを使用するのですか?
entity-framework - modelBuilder によるデータベース クエリの作成を参照してください。
現在、(非 EF) データベースとの下位互換性を必要とするプロジェクトに取り組んでいますが、モデルから新しいデータベースを作成したいと考えています。
このタスクでは、現在のスキーマをどこかに (XML 形式で) 保存し、スキーマと一致するまで生の SQL 更新手順でデータベースを更新します。これは正常に機能しています。
また、modelBuilder は現在のスキーマと一致します (私のアルゴリズムでは、context.Database.Create() によって新しく作成されたデータベースと保存されたスキーマの間に違いはありません)。
スキーマは開発の後の段階で変更される可能性が高いため、Up-to-date データベースを作成するには2 つの方法をサポートする必要があり、これら 2 つを組み合わせることができるかどうか疑問に思っていました。保存されたターゲット スキーマを更新する必要があるためです。更新ステップを作成し、modelBuilder を更新して、必要なデータベースを正確に作成します。これは非常に面倒な作業です。
したがって、スキーマを modelBuilder エントリに「変換」する方法はおそらくないため、POCO クラスにはマップされていない情報が多くあるため (これにより、正しいデータベースを更新し、最初にクラス データベースを更新するアプローチが妨げられます)、唯一の (目に見える)私) 方法は、スキーマを更新するために使用できる Database.Create() を呼び出したときにコンテキストが作成する CREATE TABLE ステートメントを何らかの形で収集し、それに応じて更新手順を実行することです。
Create() メソッドを呼び出しながらコンテキストをログに記録することで同じことができることは十分にわかっていますが、これにはかなりの時間がかかり、不要なクエリが発行され、削除する必要があるダンプ データベースが作成されます。その後、モデルを更新するたびに。
そのため、modelBuilder (またはもちろんコンテキスト) を調べて、テーブルがどのようにマップされるかを何らかの形で確認する方法があるかどうか疑問に思っていました。
entity-framework - 1 つを除いて、インターフェイスを実装するすべての型に特定のプロパティ構成を持たせる
プロパティ「IdEventReport」を公開するインターフェイス「IEventReportElement」から継承する多くのタイプがあります。
これは、常にすぐに適切に入力できるとは限らないため、null 許容プロパティですが、データベースでは null 許容であってはなりません。
そのため、行を追加しました
DbContext の OnModelCreating メソッドに。
ただし、タイプ 'Position' はこのインターフェイスを実装する必要がありますが、データベースにプロパティ 'IdEventReport' の列を持つべきではなく、代わりにそれが公開するプロパティ 'IdParent' の列を持つ必要があります。
および modelBuilder のセクション
ただし、データベースを作成しようとすると、すでに例外がスローされます。
System.InvalidOperationException: プロパティ 'IdEventReport' は、タイプ 'Position' で宣言されたプロパティではありません。Ignore メソッドまたは NotMappedAttribute データ注釈を使用して、プロパティがモデルから明示的に除外されていないことを確認します。有効なプリミティブ プロパティであることを確認してください。
これは有効かもしれませんが、特定のタイプの指定された Type 構成をオーバーライドすることはできませんか? このインターフェイスを実装する他のすべての型に行 .IsRequired() を追加する必要がありますか、またはこれを克服する別の方法はありますか?