10

新しいインターネット Web アプリに EF (.NET 4.5 の標準) を採用しました。

このアプリには、db アクティビティに対するかなりの操作が含まれ、約 30 以上のテーブルが含まれます。

私が言いたいのは、これは単純な学校のプロジェクトではなく、通常、EF がほとんどのニーズに適しているということです。

このアプリをさらに開発するにつれて、適切な/優れたデータベース設計に対してEFが非常に制限されているか禁止されていることがわかりました(特にパフォーマンスに対する用語)

1) 含める

クエリ部分でインクルード機能に遭遇しました。多くのデータが欠落しているのは、インクルード設定が欠落しているためです。

このことを入れれば入れるほど、単純なデータ検索が特定の機能で必要以上のものを取得するのではないかと心配になります。

2) 検証

データ コード自体にコードを直接変更する必要がないビジター パターンを好むため、このニーズに対応するために Fluent Validation を採用しています。

しかし、サブクラス化するにつれてより多くの課題が発生するため、OOP の単純なものを尊重できる検証を行う必要があります。私はそれを管理しましたが、その実装ではより複雑で、特定のことが本当に嫌いでした。このサブクラスの検証の問題は、DataAnnotation でも発生したと思います。

3) 取引

ここで、適切な db トランザクション制御を組み込む必要があります。これが EF に欠けていることがわかりました。間違っている場合は修正してください。

私はエンタープライズ コンポーネント (.NET の COM+、ずっと前) を使用していましたが、EF で適切な (またはその欠如) トランザクションの実装を見つけることができません。

私はまだこれに取り組んでいます...

結論)

コーディングで EF が唯一役に立ったのは、他の多くのツール/フレームワークに共通の機能であるデータ/エンティティ コードの生成であることに気付きました。

この EF を破棄し、EF 以前の時代のアプローチに戻し、ストアド プロシージャを採用し、まだコード生成されたテーブル クラスを採用することを考えています (ただし、EF や DBML は使用しません)。

過去にパフォーマンスの問題で多くの課題があったため、SQL LINQ なしで行うことができます。

現実的にはほとんど機能していないこのORMは別として、私の単純な心が理解できる理由が何であれ、私はEFにとどまって固執するべきだというあなたの意見が好きです。

4

4 に答える 4

9

Dapperを調べましたか?Dapper は超高速なマイクロ ORM です。これは Stackoverflow の人々 (Sam Saffron) によって開発されたもので、パフォーマンスと速度というまさにその理由から、このサイトで広く使用されています。リンクは次のとおりです。

https://github.com/StackExchange/dapper-dot-net .

私たちは EF を捨て、Dapper のみを使用しています。Dapper.SimpleCRUD や Dapper.SimpleCRUD.ModelGenerator などの他のコミュニティが開発した Dapper 拡張機能と組み合わせると、EF に対する Dapper のすべての利点を維持しながら、データベースから POCO をすばやく生成できます。全体的にもう少しコードを書くことになりますが、Dapper の速度は、ADO.NET の SqlDataReader を使用する場合とほぼ同じです。SimpleCRUD へのリンクは次のとおりです。

https://github.com/ericdc1/Dapper.SimpleCRUD/

于 2013-07-15T07:49:20.163 に答える
2

特定の段階を超えると、EFの有用性が低下することに同意します

データベースがアプリケーションを超えて役立つ場合は、アプリケーションだけでなく、企業向けに DB を設計してください。これは、EFが落ちるところです。他のプレーヤーが必要としているデータベースに対するさまざまな視点を考慮しない (できない) ため、単純なインデックスと関係が得られます。

私の2c(非常に複雑な質問への迅速な回答):

データ コレクションを管理し、ビジネス レイヤーに有用なデータ セットを提供し、基になるテーブルへの挿入/更新を可能にする SP を記述します (ええ、私は知っています)。ただし、テーブルごとに CRUD を記述するだけでなく、有用なデータ API を記述するようにしてください。それは無意味な時間の無駄です。

EF を使用してこれらの SP に接続します。EF は便利なデータ クラスを生成し、トランザクション ラッパーやその他の便利な機能を多数提供します。

楽しみ!

1 つのツールですべてを実行できるわけではありません。状況に応じて選択してください。

于 2013-07-15T08:17:23.613 に答える
0

正直なところ、私は数年前、linq 構文のために .net/sql の初心者に EF を使用することをまだ提案していました。正直なところ、EF から得られるものは他にありません。

SQL の代わりに C# を書きたいという誘惑は、最初は非常に便利に思えるかもしれませんが、実際にはそうではありません。機械で生成されたSQLは、あなたが一日の終わりに持っているSQl獣の手作りの部分を打ち負かすことはできません:)

それ以外では、EF は Web サーバーのメモリと CPU であるメモリを消費しているだけです。まあ、ほとんどの場合、私はそう思いますが、確かではありません。それでも、パフォーマンスとメモリの面でより多くのリソースを消費しています。

そして、重くて重い 20 ポンドの edmx モデルの GUI には完全にうんざりしています。テーブルごとに +1 ポンド :) edmx を実際の DB と同期させるために多くの時間を失っています。VS のテーブルにカラフルなアイコンが必要だと誰が言いましたか? これらすべてが存在する唯一の理由は、linq-to-entities を可能にするためです。ひどいことに、私は元の SQL がそれほど素晴らしくもクールでもないように見えるだけです。

それで、私自身、少し前に決定を下しました-私の個人的なプロジェクトにはEFはありません。重いバギーのようなものはありません。あなたが取って簡単にしているときは、人生は簡単です。

于 2014-11-21T18:53:25.890 に答える