問題タブ [entity-framework-5]
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.
entity-framework-5 - Entity Framework 5.0は楽観的同時実行例外を処理しますか?
いくつかの潜在的な例外を処理するときcontext.SaveChanges()
、例外の 1 つがOptimisticConcurrency
. これに関する Microsoft のドキュメントhttp://msdn.microsoft.com/en-us/library/bb399228.aspxでは、EF 4.x についてこれについて説明しています ...
Refresh()
...しかし、EF 5.0 (RC) では、私の EF5、コードファースト、DbContext 派生context
クラスには存在しないため、これは機能しないようです。
わかりますcontext.Entry(context.SalesOrderHeaders).Reload();
-しかし、それは更新/マージではなく、まっすぐなdbからのリロードであるように見えます(ポリシークライアントが勝つ)。
EF5 でオプティミスティック同時実行例外を処理する方法はありますか? 実際には、SaveChanges() での例外処理に関する一般的なポインターでさえいいでしょう
ありがとう
.net - Entity Framework Code First: PK が FK である 1 対 1
次のように、 Entity Framework 5 Code Firstを使用して1 対 1 の関係をマッピングしたいと思います。
データベースのProfile テーブルスキーマには、Usersテーブルの外部キーである主キー があることに注意してください。UserId
Profiles テーブルで人為的な識別子を避けることができるかどうか知りたいです。
前もって感謝します!
アップデート
まあ、Erangaとhvdの両方の答えが役に立ちそうです。いくつかの貢献により、所属するプロファイルを持つユーザーを作成するトランザクションが成功しました。
- hvd =>オブジェクト モデルに人為的な識別子は必要ありません。
- Erlanga => あなたのアプローチは機能しますが、データベースに [Id] 列を作成する必要があります。
データベーステーブルでも人工的な識別子を回避する方法を見つけた人はいますか?
asp.net-mvc - EF + SQL Server: コード ファーストまたはデータベース ファースト
ASP.Net 2.0 Web フォームで記述されたシステムがあります。MySQL Server と通信するフレームワークは非常に優れています。サーバーフォームタグまたはパネル内のすべてのコントロールを読み取り、ターゲットテーブルで CRUD 操作を実行します。
CRUD ページを作成するときは、データベース user{id,name,password,createdate} にテーブルを作成するだけで済み、テーブル内の正確な列名になるように id を使用するだけです。コントロールは、入力/選択/オプション/チェックボックス/テキストエリア、またはページ上の FCK エディターまたは CK エディターです。フレームワークは、パネル内のすべてのコントロールをループし、保存/編集/削除します。新しいフィールド (メールとモバイル) を追加したい場合は、ページに 2 つのコントロールを追加し、テーブルにさらに 2 つの列を追加するだけです。それでおしまい。page.aspx.cs ファイル、エンティティ レイヤー、ビジネス レイヤー、またはデータ アクセス レイヤーで何も変更する必要はありません。実装と保守は非常に簡単です。
Entity Framework CT5 で ASP.Net 4 MVC3 を使用するようにシステムをアップグレードしたいと考えています。システム全体をゼロから再構築します。ここの何人かの専門家が私にいくつかの指針を与えてくれることを望んでいました. システムを再構築するには、次の 2 つのオプションが見つかりました。
1. Code First 私たちの新しいシステムは、上記のフレームワークとまったく同じ操作を行います。すべての Request.Forms データをループし、それらをデータベース内の関連テーブルにマップして、すべてのデータを保存/更新/削除します。これを行うには、ビューがフォーム データをポストし、コントローラーがエンティティ クラスで値を受け取り、EF を介してデータベースに保存します。View にデータを表示するには、ViewModel クラスを作成する必要があります。メールやモバイル フィールドをユーザー ページに追加するなどの変更がある場合、エンティティ (ドメイン クラス) と ViewModel の 3 つの場所のビューを変更する必要があります。EF は自動的に ALTER TABLE を実行して 2 つの新しいフィールドを追加するため、データベースを変更する必要はありません。エンティティ クラスとビューモデル クラスの両方のニーズを最小限に抑える方法はまだわかりません。
2. データベース ファースト 私はこの方法を好みませんが、このソリューションがより柔軟な操作を提供する場合はそうします。データベースに列を作成し、システムが動的に ViewModel を作成し (その方法はまだ考え中です)、テーブルのすべての列を読み取り、ページにデータを表示します。ビューがデータをポストするとき、エンティティ クラスを動的に作成し、変更をデータベースに保存する必要があります。
編集: 現在のシステムをアップグレードする理由。
- .Net 4、Linq、Entity Framework、目立たない JavaScript ライブラリ、JSON データの操作がより簡単、リモート検証 (現在のシステムでは RequireFieldValidator、RegExValidator を使用できますが、制限があります。入力チェックボックスとオプションの検証)、var とインターフェイスを使用したダックタイピング。
ef-code-first - Entity Framework 5 Code-First アプリの再起動時にデータベースを削除/再作成する
最新の EF 5 CF (VS2012 ではなく VS2010) を試しています。私は通常、MSDN EF 5.0 クイックスタートに従っています: コードを最初に使用してモデルを作成する...
コンソール アプリを使用するのではなく、私の DbContext は Windows サービスにあり、最終的には WCF サービスをホストすることでさまざまなデータ サービス メソッドを公開します (クライアントは WPF MVVM になります)。
Windows サービスの OnStart で SetInitializer を呼び出し、簡単なクエリを実行して初期化をトリガーします。
そして、EF CF はモデルからデータベースを作成し、期待どおりにシードします。
しかし、サービスを停止/再起動すると、EF はデータベースを削除して再作成しているように見えます(または、テーブルを削除して再作成しているだけでしょうか?)。データベースに対して行った初期化後の変更はすべてなくなり、「シード」データのみが存在します。
私は EF 4.1 と 4.3 を使用したことがありますが、この動作は見たことがありません。どこを見ればいいですか?
お父さん猫
編集:これを投稿した直後に問題が見つかりました...クイックスタートコードには、データベースの初期化戦略が DropCreateDatabaseAlways に設定されています。
それは、コードを注意深く見ずにコピー/貼り付けすることで得られるものです!
DC
entity-framework - 複数のコンテキストでのEF5コードファースト移行?
このアプリケーションには、同じアプリケーションデータベースへの2つのコンテキストがあります。各コンテキストは、関心の分離全体に明確に分割されています。
Context1とContext2の2つのコンテキストがあり、Context2のクラスのみを変更した場合、EF5.0はContext1も変更されたと見なしているようです。これはEF5.0を混乱させるようであり、両方で移行をトリガーするようです。その誤った検出の後、結果として生じる移行も一貫性がありません。それと私たち自身の監視のために私たちは奇妙な行き止まりにあり、おそらくデータベース全体をもう一度再構築する必要があります:((アップパスとダウンパスは一貫していません)
だから、質問:
- EF 5.0は、複数のコンテキストのモデル変更の検出と移行をサポートしていますか?ここで質問する前に、このEF4.3スタックオーバーフローの質問とRowanによるこのMSFTの投稿を読みました。EF 4.3 => EF 5.0の改善はコードファーストと移行を対象としているため、これは繰り返されないと思います。
- そうでない場合、皆さん(MSFT / Rowan!)はいつそれをサポートする予定ですか?
どうも
背景ストーリーの詳細(スキップできます):
コードファーストの流暢なAPIを使用して、両方の「スキーマ」を慎重に設定し、テストデータを追加してテストし、「ライブ」(アルファステージ)データを追加しました。Context1には重要な「ライブ」情報が含まれているため、そのままにしておきcontext2
、コードのファーストクラスに新しいメンバーを追加して2番目のコンテキスト(ここ)を変更しました(db用語ではテーブルの新しい列)。アプリを実行したところ、両方が変更されたことが検出されたようです。最後に、変更されていないContext1は呼び出されないと考えて、起動
Database.SetInitializer<Context1>(new DropCreateDatabaseIfModelChanges<Context1>());
時に追加したコメントはコメントしませんでした。それで、それは私たちの重要な今成長したテーブルを一掃しました!はい、クラス定義をロックダウンするだけでは不十分だったので、それを削除する必要がありました。
unique-constraint - Entity Framework 5は固有の制約をサポートしていますか?
Entity Framework 5がエンティティプロパティの一意の制約をサポートしているかどうか疑問に思っていますか?その場合、プロパティを一意にするように指定するにはどうすればよいですか?
entity-framework - EFでPOCOオブジェクトの関係を使用/永続化する方法は?
次のようなPOCOオブジェクトがいくつかあります。
各Fooオブジェクトには1つのバーがあります(その逆も同様です)。
次に、Foo/Barオブジェクトの新しいペアを作成します。だから私はこれをします(そしてこれは私が間違っていると思うところです):
おそらくお分かりのように、私が「追加」したので、同じオブジェクトグラフの一部であるため、追加されることを望んでいますが、foo
追加bar
されていません。またFooId
、Bar
オブジェクトのが更新された後も追加されません。を呼び出しますSaveChanges
(ただし、Id
Fooオブジェクトは更新されます)。
したがって、この動作は、EFプロキシオブジェクトではなくPOCOを処理しているためであり、この動作を実現するための「配管」はありません。Id
オブジェクトからをフェッチしてFoo
手動でオブジェクトに格納しBar
(またはその逆)、をさらに呼び出すこともできますがSaveChanges
、これは明らかに正しい方法ではありません。
したがって、おそらく、裸のPOCOオブジェクトではなく、EFプロキシオブジェクトを作成する必要があります。それを行うための最良の方法は何ですか?
entity-framework - Entity Framework 5.0 RC-おそらく構成タイプが欠落しているため、パッケージマネージャーコマンド'add-migration'が失敗します
C#/ Visual Studio 2012 RC /.NET4.0用のEntityFramework5.0.0 RC / EF 5.x DbContext Generatorを使用して、プロジェクトで自動移行を有効にしようとしています。enable-migrations
パッケージマネージャーコンソールで実行しました:
ご覧のとおり、DbContextから派生した型は自動的に検出されませんでしたが、生成されたコードファイルにこの型の名前を入力することで、これを簡単に解決できましたMigrations/Configuration.cs
。
ただし、次のステップであるPackage Manager Consoleコマンドenable-migrations
は、前のステップで追加された移行構成タイプが見つからないために失敗します。
どうすればこれを解決できますか?
編集:パラメーターを使用して構成タイプの名前を指定できることがわかりました-ConfigurationTypeName
:
これはまだ機能しませんが、少なくともベイルの理由を明らかにします。つまり、移行構成タイプではないadd-migration
と考えます。Test.Migrations.Configuration
enable-によって生成されたものであるため、受け入れられない理由について誰かが手がかりを持っていますmigrations
か?以下の生成されたコードを参照してください(UserModelContainerはDbContextから派生しています)。
metadata - WCF RIA ドメイン サービス クラスで EFv5 の dbGeography 空間データ型を使用する方法
geography データ型を持つ EFv5 を使用しています。つまり、Place というエンティティがあり、geography タイプの geoLocation というプロパティがあります。VS 2012 は、このエンティティのコードを自動的に作成し、この地理タイプのプロパティ タイプは System.Data.Spatial.DbGeography として宣言されています。だから、すべてがうまくいっています。
しかし、ドメイン サービス クラスを追加して場所エンティティを含めるようにチェックすると、domainservice.metaData.cs ファイルが地理タイプのプロパティを作成できないように見えるため、ソリューションのコンパイルが停止します。そして、「エンティティ 'SilverlightApplication1.Web.Place' には、サポートされていないタイプのプロパティ 'GeoLocation' があります」というエラー メッセージが表示されます。
では、この地理データ型をドメイン サービス クラスに含めるにはどうすればよいでしょうか。
作成したメタデータ ファイルにプロパティを手動で追加しようとしましたが、同じエラー メッセージが表示されます。
entity-framework - Entity Framework 5 の新しい移行機能は、列挙型の変更を完全にサポートしていますか?
次の単純なモデルがあるとします。
Car
Entity Framework は、データベースに新しいオブジェクトを追加するときに、CarType
列挙値を整数として格納します。
CarType
整数値が変化する方法で列挙型を変更した場合(順序の変更または値の追加/削除)、 Entity Framework は移行を使用してデータ移行を適切に処理する方法を認識していますか?
たとえば、別の値を に追加したとしますCarType
。
これは、データベース内の既存のデータには実際には影響しません。0
まだまだですCar
、1
まだまだTruck
です。しかし、次のように の順序を変更すると、次のCarType
ようになります。
更新されたモデルによるとが現在であるため、指定する が1
のデータベース レコードは正しくありません。CarType
Truck
1
Van