2012-04-11 1 views
0

私は、ASP.Net MVCベースのアプリケーションのEntity Frameworkを評価しようとしています。 私の会社は顧客にSQLデータベースを出荷し、顧客がこのデータベースを変更するためのツールを提供しています。彼らは自分のフィールドを追加し、既存のフィールドを変更します(通常はそれを大きくします)が、私たちが出荷したフィールドは削除しません。彼らはおそらく独自のテーブルを追加することもできます。彼らはデータベースと各テーブル/フィールドと各フィールドのカスタム検証情報を記述するメタデータテーブルを変更します。私たちはすでにデータベースにフィールドを追加し、メタ情報テーブルを作成するツールを持っています。 例、 "Patient"という表が出荷されています。彼らはこのテーブルに "LastVisitDate"という名前のフィールドを追加して、このフィールドをメタ情報(例:Label = "Last Visit Date"、FieldType = "DateTime"、MinValue = "1/1/2000"など)でFieldDefinitionsテーブルに登録できます。 」など) このシナリオを考えると、我々はxmlファイル(例:(簡体字)に基づいてオンザフライでUIを生成しますEntity Frameworkは、顧客がデータベースを変更できる場合に便利ですか?

<fields> 
    <Patient.LastName> 
    <Patient.FirstName> 
    <Patient.LastVisitDate> <!-- Added by customer --> 
<fields> 

基本的には、私たちのアプリケーションが解雇されるたびに、私はなることはありませんテーブル構造が何であるか(何百ものテーブルがありますが、わかりやすくするためにそれらを残しています)

このようなシナリオでは、エンティティフレームワークを使用できますか? SQLを構築する必要がありますCRUD操作を達成するためにオンザフライでクエリを実行しますが、EFを使用してこれを達成する方法はわかりません。

おかげ

+0

これは、どれくらいの工夫をしているのかによって異なります。 Entity Frameworkは、フィールドを説明するプロパティを追加できる場合にのみ有効です。そのためには、型定義を動的に作成し、新しい 'DbModelBuilder'を使って型定義を登録する必要があります。あなたは 'TypeBuilder'に精通していますか?動的に作成された型は、基本的な 'Patient'クラスから継承することができるので、強く型付けされたクエリー(context.Patients where patient.LastName ==" Doe "select patient')作成されたフィールド。 – hvd

答えて

0

私はEFはあなたの条件に基づいて、あなたのために良いだろうとは思いません。開発者の時間を節約するEFの最大の利点は、強力な型付きLINQクエリを作成し、EFフレームワークを使用してSQLクエリに変換できることです。

あなたの場合、私はこれを行う簡単な方法はないと思います。あなたのケースでEFを使用する利点はありません。

0

最も大きな問題は、EFコンテキストが型を生成する(モデルが最初になる)か、指定した型(コードが最初にあります)に対して機能することです。おそらく何らかの形でがObjectContext/DbContextを動的に生成するのであれば、それ自体は問題にならないでしょう。問題はそれが残りのコードベースを壊すことになるということです。

EAV modelsは医療環境、またはエンティティの属性をユーザー自身が継続的に変更する必要がある環境では珍しくありません。あなたがこれを代替案と考えていたかどうかはわかりません。あなたが気にしているのは、きれいで簡単な解決策ではありませんが、少なくとも現在のソリューションよりも優れている(あるいはそれほど悪くない)と主張します。

スキーマに不変な部分がある場合(私はそこにたくさんあることを望みます)、もちろんEFを使用することができます。

+0

GertArnoldに感謝します。 EAVは良い考えですが、残念ながら全社的な努力なしに、そして私たちのすべてのアプリケーションを壊さずに切り替えることは不可能です。私のシナリオでEFを検討している理由は、適切なモデルが(私の場合は)オンザフライで定義されるとバインディングの容易さです。 – Sai

+0

また、GertArnoldは、なぜDBContextを生成すると、残りのコードが壊れると思いますか? – Sai

+0

残りのコードは、コンテキスト内の型の上に構築されるためです。もちろん、そのすべてではありませんが、コンテキストが変更されたときには、それ以上コンパイルされない部分もあります。 –

関連する問題