問題タブ [code-first]
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-4 - EF CTP4 - テーブルを作成しますが、DB は削除しません
単一のホストされた SQL Server DB があり、それを削除する権限がありません。EF でドメイン クラスからテーブルを作成するにはどうすればよいですか? RecreateDatabaseIfModelChanges と AlwaysRecreateDatabase は DB を削除しようとしますが、CreateDatabaseOnlyIfNotExists はテーブルを作成しません。
どうも
.net - EF4コードファースト:オブジェクト関係、外部キーの定義
<RANT_MODE>
EFコードファーストのアプローチは多くの時間を節約することを目的としていますが、当面はおもちゃの例だけを見て、必要なデータベースを生成する方法を理解するために何時間も費やしました。しかし、それでもそのエウレカの瞬間を望んでいます:-)
<RANT_MODE />
質問に移りましょう!
仮想プロパティと具体的なプロパティ
EFがオブジェクトの関係をどのようにマッピングおよび取得するかを理解しようとしています。プロパティをマークする必要があるのはいつですか?マークしないのvirtual
はいつですか?(public Person Owner { get; set; }
vs.のようにpublic virtual Person Owner { get; set; }
。)コードの数十の例で-最初に、説明の観点からあまり説明することなく、これらを交換可能に使用しているように見えることを確認しました。私が知っていることは、遅延読み込みを可能にするためにナビゲーションプロパティ(public virtual ICollection<Person> Owners { get; set; }
)が必要であるということvirtual
です(正しい..?)が、それは非コレクションの世界にどのように適用されますか?
オブジェクト関係と外部キー
public int OwnerId { get; set; }
関心のある'main'プロパティ()に加えて、外部キーフィールド()を含める必要があるかどうかについての情報を見つけることができませんでしたpublic Person Owner { get; set; }
。私はそうしないように試みましたが、EFは私のテーブルに名前が付けられたint列を親切に自動追加Owner_Id
し、私が何を達成しようとしているのかを理解しているようです。
コードファーストの規則(セクション「外部キー」)で、EFチームは、「関係の従属端に外部キープロパティを含めるのが一般的」であり、「コードファーストは、「」という名前のプロパティを推測するようになりました」と述べています。 (すなわち、OwnerId)[...]主キーと同じデータ型で、関係の外部キーを表します。つまり。私が両方を持っている場合、EFはそれらが関連していることを知っています。
しかし、「外部オブジェクト」自体に加えて、FKを保持するそのようなプロパティを明示的に指定することは良い習慣と見なされますか?
異物、外部キー-続き
上で述べたようにpublic Person Owner { get; set; }
、オブジェクト(たとえばEvent
)にのみある場合でも、テーブルにはEFによって自動的に追加されEvents
た列が含まれます。Owner_Id
さらに、取得すると、のプロパティにアクセスできるようになりますOwner
。
ただし、次のシナリオを検討してください。私は2つのクラスを持っています:
TPT関連にしてほしい。これは、手動マッピングを意味します。
お気づきかもしれませんが、EFが自分のOwner_Id
コラムで行うことを再現しようとしました。しかし、取得すると、myAccountInstanceFromDb.Owner
はnullになります。何故ですか?Owner
EFに魔法をかけて自分の財産を埋めるべきだとどうやって伝えるのですか?
ポインター、ポインター
上記を明確にしていただければ幸いです。答えを本当に知りたいと思うようになりましたが、EFで遊ぶのがいかに簡単かを示す別のおもちゃの例を紹介するだけの別の記事を読むことができません。とはいえ、EFの頭脳に関する最新の詳細なリファレンスがある場合は、リンクも投稿してください。
よろしくお願いします!
linq - コードファーストアプローチエラー:指定されたタイプメンバー'xxxxx'はLINQtoEntitiesでサポートされていません
リポジトリレイヤーをさらに抽象化するために、http://msdn.microsoft.com/en-us/magazine/ee236639.aspxで説明されているコードファーストのアプローチに従うことを試みました。
アカウントエンティティとサブスクリプションエンティティの間には多対多の関係があります。ナビゲーションプロパティは、他のエンティティを指す各エンティティに存在します(Account.Subscriptionsなど)。
独自のモデルを作成する前は、エンティティで生成されたモデルを使用していましたが、以下は正常に機能しました( "db"はエンティティコンテキストです):
アカウントのモデルは次のようになります。
そして、同じLINQクエリを実行しようとすると、次のエラーが発生します。
「指定されたタイプメンバー「サブスクリプション」は、LINQ to Entitiesではサポートされていません。初期化子、エンティティメンバー、およびエンティティナビゲーションプロパティのみがサポートされています。」
どんな提案でも大歓迎です。
c# - EF4コード-最初にInvalidOperationExceptionが発生します
プロジェクトをビルドするたびに実行しようとすると、問題が発生します。イニシャライザーは実行されているようですが、最初のクエリに関しては、次のように終了しますInvalidOperationException
。
参考までに、NuGetで直接インポートされたEF CodeFirstCTP4を使用しています。SQL Server2008R2への接続
私がしたいのは、モデルの修正がある場合はデータベースを再作成し、ルックアップテーブルのいくつかの値をシードすることです。これらは両方とも、箱から出してすぐにサポートされるようです*。
私のセットアップは次のようになります。
Global.asax
CoreDB.cs
実行すると、これと同様の行で停止します。これは、基本的に、データベースの作成後に最初に検出されるクエリです。
私がそうは思わないこと:
- 権限ではありません:SQLServer内の実際のデータベース自体を削除しました。アプリケーションは、クエリの実行が試行されるのとほぼ同時にそれを再作成します(初期化子が設定され、必要になるまで作成を保留することは明らかです)。また、Web.configで指定されたユーザーとしてSQL Serverにログオンし、データベースへの完全な読み取り/書き込みアクセス権を持っています。実際、そのアカウントがデータベースも作成するので、おそらく彼らはそうすべきです。
- データベースが作成されています:DBを削除すると、自動的に正常に再作成されます。
providerName
接続文字列は、属性を含めて正しく定義されています。
<add name="CoreDB" connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=TheDatabase;User Id=TheUsername;Password=ThePassword;" providerName="System.Data.SqlClient" />
- クエリが正常に失敗すると、次にアプリケーションが再構築されるまでコードが正しく開始されるため、コード/ロジックのバグではないようです。それは明らかに可能性があり、とにかく何があってもコードに回避策を適用する必要があるでしょう。:)
何をすべきか?
理想的には、「データベーススキーマについてはあまり考えない」ことです。Scott Guの優れたブログ投稿(および既存のデータベースでの作業のフォローアップ)にあるように、問題が解決して消えてしまったようにしたいと思います。ほとんどの場合、これは真実です。ある時点で接続が閉じられないという問題のようですが、この問題を修正する方法がわかりません。
いくつかのフォーラム/SOの投稿は、私が抱えている問題が基本的にイニシャライザーが計画どおりに機能しておらず、接続が開いたままになっている可能性があることを示唆しています。他の場所での解決策は、単に「独自の初期化子を作成しない」ことであるように見えます。これは最大の解決策ではありませんが、誰かがアイデアを持っていない限り、おそらくCTP5までやらなければならないでしょう。
*うん、それはCTPだと知っているので、「サポートされている」という言葉はおそらくないでしょう:)
entity-framework - EF4 Code-First: 関連付けの設定時にモデルに外部キーを含めるか含めないか
Code-First EF4 ウォークスルーの一部では、POCO を定義するときに次のようなパターンが見られます。
Product に ManufacturerId と Manufacturer への参照の両方が必要なのはなぜですか? 遅延読み込みと関係がありますか?
entity-framework-4 - モデルがEF4コードの最初のデータベース初期化子で変更された場合、テーブルをドロップする方法は?
モジュールがインストールされているかどうかによっていくつかのテーブルが異なるモジュラー アーキテクチャがあります。エンティティ フレームワーク CTP4 では、モデルが変更されたときに (データベース全体ではなく) テーブルを削除して再作成するデータベース初期化戦略をどのように使用できますか?
entity-framework-4 - EF4とコードファースト:なぜDDDの人々はそれが好きなのですか?
Queen of Entity Frameworkは、EF4Code-FirstがDDDの人々にとって本当に魅力的であることを示唆しています。この声明は他の多くの場所でも行われています。
私の質問は、なぜコードファーストがモデルファーストよりも魅力的なのかということです。後者の方がDDDの動作と一致していると思いますか?
entity-framework-4 - コードファースト:ソースクラス/テーブルがターゲットクラスでもある多対多の関係を作成するにはどうすればよいですか?
コードファーストを使用して、ソースクラスがターゲットクラスでもある多対多の関係を作成する方法の例を誰かが投稿できますか?
何かのようなもの:
おもちゃ*<----->*おもちゃ
ありがとうございました。
ヌーノ・エスピーカ
transactions - EF4 Code First、TDD、CRUD、およびトランザクション
過去に、次のようなデータ アクセス/リポジトリ コードを作成するときに、単純な CRUD 操作の単体テストを作成しました。
今日、私は EF4 Code First をいじっていましたが、このテスト シナリオが Entity Framework レキシコンでどのように変換されるか分からないことに気付きました。を呼び出すと、呼び出されたかどうかに関係なく、DbContext.SaveChanges()
保存してAcceptAllChanges()
コミットするようです。ObjectContext
の代わりに を使用してもDbContext
、作成されたモック/テスト オブジェクトを手動でクリーンアップしないと、この単純なテスト シナリオを再現する方法がわかりません。MSDNでこの記事を読みましたが、実際には型メソッドもTransactionScope
ありません。Rollback
私は使用TransactionScope
し、決して呼び出しませんかComplete
? 単体テスト中にロールバックするために DbContext および/または ObjectContext を使用する別の方法または方法はありますか? EF4 Code First で TDD の考え方を完全に再調整する必要がありますか?
.net - EF CTP5FluentAPIとの1対多の関係でカスケード削除をオフに切り替える方法
Fluent NHibernateでは、マッピングのカスケード設定を設定できます。
これは、Entity Frameworkの「コードファースト」でどのように行われますか?