タグ付けされた質問 「entity-framework」

Microsoftによって構築されたORMで、.Net Framework 3.5以降の一部として利用できます。

5
Entity Frameworkによるドメイン駆動設計の落とし穴
私が研究したDDDに関するチュートリアルの多くは、主に理論をカバーしています。それらはすべて基本的なコード例(Pluralsightなど)を持っています。 Webでは、EFを使用したDDDをカバーするチュートリアルを作成しようとする試みも数人います。それらをほんの少しだけ調べ始めると、それらは互いに大きく異なることにすぐに気づきます。一部の人々は、アプリを最小限に保ち、追加のレイヤー(EFの上にリポジトリなど)を導入することを避けることを推奨します。他の人々は、追加のレイヤーを決定的に生成し、多くの場合、DbContext集約ルートに注入することによってSRPに違反します。 私が意見に基づく質問をしている場合、私はひどくお詫びしますが... 実践に関しては、Entity Frameworkは最も強力で広く使用されているORMの1つです。残念ながら、DDDに関する包括的なコースは見つかりません。 重要な側面: Entity Frameworkは、UoW&リポジトリ(DbSet)をすぐに使用できるようにします EFでは、モデルにナビゲーションプロパティがあります EFでは、すべてのモデルが常にオフで使用できますDbContext(それらはとして表されますDbSet) 落とし穴: あなたがすることはできません、あなたのモデルは、ナビゲーションプロパティを持っており、それが彼らとのコールを変更することができます-あなたの子供のモデルのみ集約ルートを経由して影響を受けている保証しますdbContext.SaveChanges() でDbContext、あなたはこのように、あなたのすべてのモデルにアクセスすることができます回避集約ルートを あなたは、経由ルートオブジェクトの子へのアクセスを制限することができますModelBuilderでのOnModelCreating法分野としてそれらをマークすることにより、(私はまだそれがDDDについて移動する正しい方法だとは思わないそれに加えて、これは将来的ににつながる可能性の冒険の種類何を評価するのは難しい- 非常に懐疑的) 矛盾: Aggregateを返すリポジトリの別のレイヤーを実装しないと、上記の落とし穴を部分的に解決することさえできません リポジトリーの追加レイヤーを実装することにより、EFの組み込み機能(すべてDbSetがすでにレポです)を無視し、アプリを複雑にします。 私の結論: 私の無知を許してください、しかし上記の情報に基づいてください-それはエンティティフレームワークがドメイン駆動設計に適切でないか、ドメイン駆動設計が不完全で時代遅れのアプローチであるかのいずれかです。 それぞれのアプローチにはメリットがあると思いますが、私は今完全に道に迷っており、EFとDDDをどのように調整するかについて少し考えていません。 私が間違っている場合-EFでDDDを実行する方法の簡単な一連の手順を詳細に説明できますか(または適切なコード例を提供できますか)。

3
エンティティフレームワークエンティティ-Webサービスからのデータ-最高のアーキテクチャ?
現在、いくつかのWebアプリケーションでEntity FrameworkをORMとして使用しています。これまで、すべてのデータが単一のデータベースに格納されているため、これが適しています。リポジトリパターンを使用しており、これらを使用するサービス(ドメインレイヤー)があり、EFエンティティをASP.NET MVCコントローラーに直接返します。 しかし、データベース内のユーザーに関連する追加情報を提供するサードパーティのAPI(Webサービスを介して)を利用する必要が出てきました。ローカルユーザーデータベースに、追加情報を取得するためにAPIに提供できる外部IDを保存します。利用できる情報はかなりありますが、簡単にするために、そのうちの1つはユーザーの会社(名前、マネージャー、部屋、役職、場所など)に関連しています。この情報は、単一の場所で使用されるのではなく、Webアプリ全体のさまざまな場所で使用されます。 だから私の質問は、この情報を入力してアクセスするのに最適な場所はどこですか?さまざまな場所で使用されているため、Webアプリケーションで使用する場合は常にアドホックベースでフェッチすることはあまり意味がありません。そのため、この追加のデータをドメインレイヤーから返すことは理にかなっています。 私の最初の考えは、EFエンティティ(EFUser)を含むラッパーモデルクラス、および新しい情報を含む新しい 'ApiUser'クラスを作成することでした-ユーザーを取得すると、EFUserを取得し、追加のAPIからの情報、およびApiUserオブジェクトを設定します。ただし、これは単一のユーザーを取得する場合は問題ありませんが、複数のユーザーを取得する場合は失敗します。ユーザーのリストを取得するときにAPIをヒットすることはできません。 私の2番目の考えは、ApiUserを返すEFUserエンティティにシングルトンメソッドを追加し、必要なときにそれを設定することでした。必要なときだけアクセスするので、これは上記の問題を解決します。 または、最後の考えは、データベースにデータのローカルコピーを保持し、ユーザーがログインしたときにAPIと同期することでした。これは単なる同期プロセスであるため、最小限の作業であり、ヒットのオーバーヘッドはありません。ユーザー情報を取得するたびにDBとAPIを使用します。ただし、これらはデータを2か所に保存することを意味し、しばらくログインしていないユーザーのデータが古くなっていることも意味します。 このようなシナリオを処理するための最善の方法についてアドバイスや提案はありますか?

3
ORMを使用したDDDのビジネスロジックはどこに行くべきですか?
私は過去にMDA(モデル駆動型アーキテクチャ)ツールを使用しましたが、UMLを介してモデル化し、これにより、とりわけビジネスエンティティ(ドメインモデル)とORM(マッピングなど)が生成されました。 ドメインで動作するビジネスコードとサービスの多くはモデルの一部であり、リポジトリはビジネスエンティティを返していました(そのため、別のORMに切り替えることはできませんでした(望んでいなかった))。 しかし、今はプロジェクトを始めており、DDDについて考えたいと思います。 これまでのところ、ビジネスロジックをドメインモデルに入れ、リポジトリを介してORM(どちらを選択した場合でも)で作業するように感じています。ただし、アプリケーションのORM部分に引き続きMDAツールを使用したい場合、ここで作成されたモデルは非常に貧弱です(つまり、ビジネスロジックが含まれていません)。同様に、ORMにエンティティフレームワーク(.net)またはNHibernateを使用した場合、それも貧血モデルになります。NHibernateをそのまま使用した場合、ビジネスロジックをどこに置くかわかりません。 私はこのように考えるのは正しいですか、つまりDDDではドメイン内のすべてのビジネスロジックを使用し、リポジトリ経由で永続化するためにORMを使用するだけですか?

4
LINQとデータアクセスレイヤー
私は常に、自分のビジネスロジックとUIコードとは完全に別の「レイヤー」でデータアクセスコードを処理することを学びました。これは常に私にとって非常に優れたアーキテクチャであり、私が目にするすべての「ルール」またはベストプラクティスは、このスタイルのコーディング、特に単一責任の原則にうまく適合しています。 ほとんどのホームプロジェクトでは、私が作成した独自のORMを使用します。これは、常にオープンソースを作成することを目的としていました。しかし、それ以来、LINQが利用可能になりました。これは、私のORMが機能する方法と非常によく似ていました(しかし、より優れています)。 以前に自分のORMを使用して、今はLINQを使用して実行できないことはありません(REST統合のビットを除く)。だから私の質問です。LINQは新しいデータアクセスレイヤーですか?このレイヤーはもう必要ですか?私のBLLはLINQと直接通信する必要がありますか?それとも、この悪い習慣はまだですか? 編集: 元の質問はLINQ to Entitiesに関するものでしたが、LINQ to SQLに関しては興味深い答えがたくさんあります。両方の人々の考えは何ですか?LINQ to SQLでDALを実際に置き換えることはできませんが、Entity Frameworkは収集できますか?

7
Entity Frameworkは本番稼働の準備ができていますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 私が引き受ける予定の新しいプロジェクトのEntity Frameworkを調べています。その研究の一環として、業界の専門家に、安定していて「現実世界」での実装の準備ができているかどうか尋ねています。 実行中は: EF NHibernate DevExpress XPO 私はすでにXPOの経験が豊富ですが、特に満足していません。

2
デタッチされたが等しいオブジェクトを使用して、アタッチされたオブジェクトを更新できますか?
外部APIから映画データを取得します。最初のフェーズでは、各映画をかき取り、自分のデータベースに挿入します。2番目のフェーズでは、APIの「変更」APIを使用してデータベースを定期的に更新します。このAPIをクエリして、情報が変更された映画を確認できます。 私のORMレイヤーはEntity-Frameworkです。Movieクラスは次のようになります。 class Movie { public virtual ICollection<Language> SpokenLanguages { get; set; } public virtual ICollection<Genre> Genres { get; set; } public virtual ICollection<Keyword> Keywords { get; set; } } この問題は、更新が必要な映画がある場合に発生します。私のデータベースは、追跡されているオブジェクトと、更新API呼び出しから受け取った新しいオブジェクトを、を無視して別のオブジェクトと見なし.Equals()ます。 これにより、更新されたムービーでデータベースを更新しようとすると、既存のムービーを更新する代わりにデータベースが挿入されるため、問題が発生します。 以前この言語で問題がありましたが、私の解決策は、アタッチされた言語オブジェクトを検索し、それらをコンテキストから切り離し、それらのPKを更新されたオブジェクトに移動して、それをコンテキストにアタッチすることでした。ときにSaveChanges()今実行され、それは基本的にそれを交換します。 Movieオブジェクトへのこのアプローチを続けると、映画、言語、ジャンル、キーワードを切り離し、データベースでそれぞれを検索し、IDを転送して、新しいオブジェクト。 これをよりエレガントに行う方法はありますか?理想的には、更新されたムービーをコンテキストに渡し、Equals()メソッドに基づいて更新する正しいムービーを選択し、そのすべてのフィールドを更新し、各複雑なオブジェクトを更新したい場合:独自のEquals()メソッドに基づいて既存のレコードを再度使用し、それはまだ存在していません。 アタッチされている.Update()すべてのオブジェクトの取得と組み合わせて使用​​できる各複雑なオブジェクトにメソッドを提供することで、デタッチ/アタッチをスキップできますが、それでも、すべての既存のオブジェクトを取得して更新する必要があります。

1
ORM POCOはドメインエンティティを置き換えますか?
これは、この質問にいくぶん似ていますが、より広義です。 一般的には、EF 4.1のようなオームズはPOCOSをサポートし、それは今あなたのドメインエンティティを持ってしても意味がないことがデータベースに永続化されたオブジェクト? EF 4やLinq-to-SQLなどの古いORMでは、「データベースオブジェクト」が自動生成され、データベースに密結合されていたため、重要なアプリケーションの場合、より堅牢でインテリジェントなドメインエンティティにマッピングされていました。就職。 新しいORMを使用して堅牢なドメインエンティティを構築し、そのドメインエンティティとDBMSの間のマッピングを提供するだけのデータレイヤーを作成するという考えはありますか? 書面では、これが常に目標であると感じていますが、少なくとも.NETの世界では、利用可能なツールを使用して(簡単に)簡単に実現することはできません。

3
ASP.net 5とEF7でリポジトリはもう必要ですか?
EFチームにgithubで質問を投稿しました。ここでこの質問をする方がよいとの返信がありました。コピーしてここに貼り付け、リンクとして他のユーザーがGitHubでいくつかの返信を確認できるようにします。 質問:私はいくつかの調査を行っていましたが、誰かがDBContextクラスの24行目で次のように述べていると指摘しました DbContextは、作業単位パターンとリポジトリパターンの組み合わせです。 これは、EFをリポジトリーに抽象化し、インターフェースを使用してそれをコントローラーに注入する必要がなくなったことを意味しますか? Githubの元の投稿:https : //github.com/aspnet/EntityFramework/issues/4899 私がこれを尋ねる理由は、GetById、GetByName、GetWithIncludesABC、GetWithIncludes123などの多くのメソッドをリポジトリに追加しているように見えて、私の心の中でリポジトリを汚しているように思われるからです。

3
Entity Frameworkデータベースコンテキスト(モデル)をMVVM WPFのViewModelに接続する最良の方法は何ですか?
上記の質問のように:Entity Frameworkデータベースモデル(コンテキスト)をMVVM(WPF)のviewModelに接続する最良の方法は何ですか? 私はWPFでMVVMパターンを学習しています。多くの例は、viewModelにモデルを実装する方法を示していますが、その例のモデルは単なる単純なクラスであり、エンティティフレームワークモデル(ベースファーストアプローチ)と一緒にMVVMを使用したいと思います。モデルをviewModelにワイヤリングする最良の方法は何ですか。 回答ありがとうございます。 //ctor of ViewModel public ViewModel() { db = new PackageShipmentDBEntities(); // Entity Framework generated class ListaZBazy = new ObservableCollection<Pack>(db.Packs.Where(w => w.IsSent == false)); } これは私のViewModelの通常の俳優です。もっと良い方法があると思います。リポジトリパターンについて読んでいましたが、これをWPF MVVMに適応できるかどうかわかりません

1
遅延コレクションが不要になったときに、データベースコンテキストが適切に破棄されることをどのように保証しますか?
ここでベストプラクティスの種類の答えを探しています。 実装するクラスと対話するためのベストプラクティスIDisposableは次のUsingステートメントによるものであることを考えると、MVCでEFレイジーロードを使用するためのベストプラクティスは何ですか? コントローラーメソッドの例: <HttpGet> Public Function Schedule(ByVal id As Int64) As ActionResult Dim model As Schedule = Nothing Using database As dataContext = New dataContext model = (From s In database.Schedules Where s.ScheduleID = id Select s).FirstOrDefault End Using Return View(theSchedule) End Function この例では、モデルがビューに到着するまでにデータベース[dataContext]が破棄されるため、遅延読み込みが機能しなくなります。 だから私は質問だと思います: MVCで遅延読み込みを使用するためのベストプラクティスは何ですか?データベースコンテキストが適切に破棄され、メモリリークが発生しないことをどのように保証しますか?

2
EF対NHibernate [終了]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 ビジネスアプリケーションの作成を開始してから(高レベルのフロントエンドまたは非常に低レベルのシステムプログラミングを行う前に)過去2年間で、データセット、linqからsql、そして現在はエンティティフレームワークを学びました。次に見る論理的なものはNHibernateのようです。 私が最終的にEFに到達した理由は、(1)デザイナーによるサポートが最も優れていること、(2)マイクロソフトによって最もサポートされていることです。 私がNHibernateに興味を持っている理由(これらには前提の要素があります)は次のとおりです。(1)MSがデータアクセステクノロジーをチャーンするほど速く、まったく異なるものに取って代わられない可能性があります。それが何をするためのフロントランニングツールと(3)それはかなり安定していて、かなり長い間遡ることができるように見えます。 誰かが2つの比較を発表しましたか?特定の種類のアーキテクチャでは、どちらが優れているか?それとも、スタイルと好みの問題だけですか?

1
ASP.NET MVC-MVCのM、V、Cはドメインエンティティを明示的に認識する必要がありますか?
この質問はかなり主観的なようですので、ここに投稿します。 あなたはASP.NET MVCを使用してStackOverflowの独自のバージョンを書いているとしましょう、そうのようなクラスがありQuestion、Answer、User、などあなたがしている怠惰な、あなたはエンティティフレームワークを使用することにしましたのでは。したがって、上記のすべてのクラスにはナビゲーションプロパティがあります。QuestionそのAnswersをAnswer知っている、User投稿者を知っているなどです。 Martin Fowlerの本をたくさん読んだことがあるので、すべてのビジネスロジックを実装するためのサービスレイヤーが必ずあるはずです。ASP.NET MVCは、UIおよびアプリケーションロジック関連の機能にのみ使用します。 2つの質問があります。 あなたは直接のオブジェクト公開しますQuestion、Answerコントローラーにして他の人を? ビューに対しても同じことをしますか? 私は基本的に自分のアプリケーションにREST APIを提供するつもりもありませんし、「ちょっと、MY VIEWはそれが何であるQuestionかを知っているので、それが悪いかどうかわかりません。気に入らない!」 Questionクラスに次のようなフィールドがTimePostedあり、PostNewQuestionビューをそのクラスにバインドする場合に特に興味があります。そのフィールドをページ上のどのコントロールにもバインドしない場合は、投稿されないのでnull、コントローラー側でオブジェクトを取得したときにそのフィールドを設定します。それは大丈夫ですか、それとも悪い考えですか?私が考えている2つの反対のアプローチは、「どこでもDTO / ViewModelを使用すること」と「wtf、クラスが少ないほど常に良いことです!」です。 正しいアプローチは何だと思いますか?(私は直接的な答えがないことを知っているので、問題は「DTO / ViewModels /その他のアプリのアーキテクチャに適しているかどうかを判断するために何を検討すべきか」です。) また、Stackoverflowの非常に簡略化されたクローンを検討していることにも注意してください。 これはWebのみのプロジェクトです(REST APIなどは公開しません)。 ユーザー、質問、回答、タグ、検索機能があります(優れたビジネスロジックはありません) 1日あたり100人ほどのアクティブユーザーがいます(特別なパフォーマンス要件はありません) 新しいメンバーが開発チームに加わった場合でも、コードは読みやすく、驚きや特別な関心のある場所があってはなりません。 最初の3つのポイントが変更された場合の考えを表明することもできます-「顧客は、10000人の同時ユーザーを許可するために私たちのサービスを望んでいる」または「すべてのユーザーが15分に1回だけ投稿できるようにする必要がある」など。 ありがとう!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.