質問

私は私が設計していると私はSQLにLINQを組み込むことを見て非常に熱心だ新しいWebベースのプロジェクトのためにどのようなデータ層を使用することを調査してきました。 SQL Serverへのシンプルさ、柔軟性、デザイナーのサポートは本当にアピールし、暗黙のタイにおけるその見かけ上は問題あります。

しかし、LINQ to SQLは、今、それが(ADO.NETチームに渡されていますことを<のhref = "http://blogs.msdn.com Entity Frameworkのに後部座席を取っされることが最近発表されました/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx」のrel = "nofollowをnoreferrer"> http://blogs.msdn.com/ adonet /アーカイブ/ 2008/10月29日/アップデートオンLINQツーSQL-と-LINQツーエンティティ-roadmap.aspxする)。確かに、それは将来的にサポートされますが、それは、それははるかに開発作業を参照してくださいする可能性は低いです。

は、このことを念頭に、あなたは私が私のプロジェクトのためにこの技術を使用するか、いずれかの代替ORMを選択する(NHibernateは?)または手動で一般的なDALをコーディング?

価値がある推薦します

プロジェクト自体は、ベースのASP.NETとSQL Server 2005/2008で、おそらくそれはまだベータ版だにもかかわらず、MVCを使用します。それは個人的なプロジェクトだ、データベースが過度に複雑ではありません、主に、.NET、将来の技術を見て、プロトタイプとして使用されます。私はしかし、私はこの1つから学ぶものに将来のプロジェクトを基づかれることになるので、私が作るの選択肢は、今後、より大きなソリューションに影響します。

そして、はい、私は、Microsoftはおそらく、とにかく明日、まったく新しいデータアクセス技術を持って来ることを実現します! ;)

役に立ちましたか?

解決

まあ、それは主に、すでに(ビューのいくつかの興味深いポイントとしても)ここでの回答ではカバーされていますが、私はとにかく、再びそれを言うつもりです..

SQL(L2S)へのLINQは非常に汎用性であるが、それは私の観点から、あまりにも基本的な少しを感じています。ほとんどの場合、それは簡単なことをやってで良い仕事をしますが、できるだけ早くあなたがそれをもう少し尋ねると、それは高価な取得します。これは、すべての悪いことではありません。私は実際にLINQ to SQLは、実際にうまくEntity Frameworkのをsupplimentsだと思います。

例えばLinqDataSourceコントロールで自動ページングを取ります。あなたはそれまでに秩序/グループを指定しない場合、それは非常に経済的です。注文やミックスにグループ化し、パフォーマンスのスパイクを取得するために開始投げる(非常におしゃべりになります)。その後、ほとんど(私は認めるよ、ひどく難しいことではありません)、独自のページングの実装を記述する必要があります。

概念的とsymanticallyと(L2Sは、特にSQL Serverのクエリを実行するために構築されているので、私は必要があります)

私はL2Sは、生成されたT-SQLの品質の面でEntity Frameworkの上で利点を持っていることを認めざるを最初のでしょう、 LINQ to SQLはかなりのEFに似ていますが、あなたが壁にぶつかるどこより複雑な実装要件のためのニーズや配慮の拡大にある。

私はゼロからスタートし、個人的な開発時間を捧げることを選ぶとしたら、

、私は、Entity Frameworkのを選ぶと思います。興味深いことに、私はL2Sを使用して、現時点でのプロジェクトに取り組んでいると、NAD重い負荷を処理拡張できるように設計されているが、我々はより多くの「創造」の要件の一部を襲ったとき、私たちは多くの場合、SQL金属上に展開することを余儀なくされています(例えば多対多の関係)。

..だから要するに..私はこのようにそれに近づくと思います:

A)...それはEntity Frameworkをと共有されている基礎のほとんどは、使い慣れ取得MicrosoftのORMパターンや技術へのイントロ()としてSQLにLINQを学ぶ、とLINQスタイルのクエリの味(買収味あなたは、T-SQLのバックグラウンドを持っている場合)。

あなたはSQLにLINQのハンドルを持ってたら、

B)、私は(追加の利点を学ぶためにEntity Frameworkのに超えるジャンプをお勧めしたいESQLなど)

c)の両方における概念プロジェクトの証明を実施し、結果を比較します。

他のヒント

NHibernateはを選択します。これは、コンセプトや実際のORMとしていくつかの時間のために周りに滞在します。 だから、両方を学ぶために有用であろう。

IMO、この全体のことは本当に割合の外に吹き飛ばされました。

MicrosoftはSQLにLINQが死んでしまうことを言いませんでした。彼らはより多くのそれがEntity Frameworkのにマージされることを示します。

私はSQLにLINQの多くはそれにロールバックされることを知って、解決策として、Entity Frameworkのを使用することに焦点を当てるます。

本当にとにかく今はそれほど差がありません。最大の不満は、Entity Frameworkは軽量ではないということです。それは本当に問題で限り、あなたはあなたの層の間の良好な分離を持っているようにしていますか?

L2Sは完全に罰金、それは仕方私見であり、あなたが言ってきたように、どこにも行かれていません。私はのために働く企業は、データアクセスのために、それは私達の標準作られており、我々は少し5ユーザーのニッチのアプリからの素晴らしい結果と1000の+ユーザ企業アプリケーションへのすべてのためにそれを使用している。

チェックアウト亜音速ます:

http://subsonicproject.com/する

これは、このサイトがSQLにLINQを使用して構築されていることを言及する価値があります。ジェフはStackOverflowのポッドキャストでそれを使用する方法について話しました。

私は私の現在のWebプロジェクトに大きくL2Sを使用して、私はあなたが見つけるの最大のハングアップは、n階層のデータベースの開発を行うための最善の方法についてのマニュアルを参照して競合していると信じています。

まず第一に、あなたが先行であると認識するために必要なもの、ののDataContextオブジェクトのみとして長続きすることを意図している作業を、期間の単位として。また、のDataContextのはステートレスです。あなたはこれらの二つの原理に真剣に取り組むならば、n層環境でLINQを使用すると、うまく動作を開始します。

一方で、あなたは、LINQのを使用するには、いくつかの非常に非常に非常に悪いの方法を推薦する人の数が表示されます。 EVERあなたのDataContextは、静的しないでください、これは私は早い段階でのミスがあると、それが動作しなくなるまで、それは簡単に言えなど異なるセッション間で不正なデータ交差、と絶対に恐ろしいことでした驚異を働いていた、これはおそらく最大であります最も巨大なLINQのを使用しての無無ありませんし、すべての文書に大きな太字で記述する必要があります。また、セッション変数でのDataContextを永続化することも同様に悪い考えです。

私はLINQを持つに走っただけで、他の主要な厄介が切断アップデートを行っているとき、あなたは全体のコール間で同じのDataContextを使用する必要があります。たとえばます:

    public static void UpdateUser(UserLibrary.User user) {
        using (UserLibraryDataContext dc = new UserLibraryDataContext(_conStr))
        {
            UserLibrary.User newUser = (from user2 in dc.Users where user2.UserID == user.UserID select user2).FirstOrDefault();
            newUser.Email = user.Email;
            newUser.FirstName = user.FirstName;
            newUser.LastName = user.LastName;
            dc.SubmitChanges();
        }        

あなたは、単に別のDataContextの中に作成したユーザーに渡し、あなたは、私はお勧めしません偽DataContext.ObjectTrackingEnabled =を、設定しない限りアップデートは、動作するように期待することはできません。代わりに、同じDataContextの中に、あなたは、既存のオブジェクトを取得し、その値を更新し、その変更を提出してください。同じDataContextの内のすべてのようなタスクを保ちます。

あなたは(上記のような)いくつかのやっかいな問題を乗り越えたら、

私は、しかしL2Sをお勧めします、それは素晴らしい技術と間違いなく時間の節約です。あなたは簡単に変更することができますので、私はしかし、あなたのDALの周りに薄いラッパーを行うことをお勧めします。私はのOpenAccess ORMを使用して私のコードの一部を移植する(経済的な理由のために)検討しています - >私のデータアクセスの部分用のMySQL、および適切に定義された層では、この作業は私だけ数時間を取る必要があります。

私はEchostormに同意します。 L2Sは、あなたのニーズに適しています。そして、それは...で動作するように非常に簡単です。

あなたが適切にアプリを設計してもあなたのデータアクセス層を分離した場合、

、あなたはL2Sで行く必要があります。私はあなたのポストから推測するところでは、それは昔ながらのADO.NETは、ノーノー、およびEntity Frameworkのちょうどではありませんであるのに対しL2Sは、うまく自分の要件を満たす必要がありますので、大きなプロジェクトではありません...ただそれを使用しないでください、 OK? あなたもあなたのDALを分離する場合、プロジェクトが大きくなった場合とにかく、あなたが将来的に何か他のものにL2Sを入れ替えることができます。そしてL2Sはどこにも行かれていない場合でも、それはどこにも行かないです。 MSはそれに投資を停止、推奨されないか何かになることはないだろうので、それはまだ安全な投資です。 また、あなたは簡単で、成熟しているNHibernateはを、評価する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top