2009-08-16 10 views
2

Entityフレームワークについて本当に好きなのは、アプリケーションのモデルレイヤ全体をドラッグ&ドロップする方法です。あなたはテーブルを選択し、それらを結合し、あなたは完了です。データベースのスケジュールを更新する場合は、右クリック→更新をもう一度やり直してください。エンティティフレームワークのようなORM NOT for .NET

これは、XML(n)Hibernateが必要とするか、更新が難しいDjangoモデルの混乱のような、競合ORMよりもずっと前のことです。

マッピングプロセスのコントロールが良いかもしれないという事実に集中することなく、他の(主にpythonやPHPのようなオープンソースの)プログラミング言語やフレームワークに対する同様のワンクリック(または1コマンド) ?

おかげ

+3

実は、entitlyフレームワークはNHibernateのように '面倒な' XMLを使用しています。これはVisual Studioによって自動化されたことだけです。したがって、ORMよりも似た機能を持つIDEを探しているようです。 – UpTheCreek

答えて

2

SQLAlchemyのデータベースの反射がそこに半分の方法を取得します。あなたはまだそれらの間のクラスと関係を宣言しなければなりません。実際にはクラスも簡単に自動生成できますが、関係を何らかの形で名前を付ける必要があるため、クラスを手動で宣言することもできます。

セットアップにコードデータベースは次のようになります:

from sqlalchemy import create_engine, MetaData 
from sqlalchemy.ext.declarative import declarative_base 

metadata = MetaData(create_engine(database_url), reflect=True) 
Base = declarative_base(metadata)  

class Order(Base): 
    __table__ = metadata.tables['orders'] 

class OrderLine(Base): 
    __table__ = metadata.tables['orderlines'] 
    order = relation(Order, backref='lines') 

生産コードでは、おそらく何らかの形で反映データベースのメタデータをキャッシュしたいと思います。例えば、それをファイルに漬けます:

from cPickle import dump, load 
import os 

if os.path.exists('metadata.cache'): 
    metadata = load(open('metadata.cache')) 
    metadata.bind = create_engine(database_url) 
else: 
    metadata = MetaData(create_engine(database_url), reflect=True) 
    dump(metadata, open('metadata.cache', 'w')) 
2

データアクセスコードの作成を「ドラッグアンドドロップ」したくありません。

最初は簡単ですが、データベースを変更してデータアクセスコードを更新する必要があります。これは難しいところです。これまでにやったことをやり直す必要があることや、ドラッグ&ドロップデザイナーが作成したコードを手作業で編集する必要があることがよくあります。ドラッグ&ドロップデザイナで1つのフィールドマッピングを変更すると、出力ファイルに関連のない行の変更があるため、ソースコード管理システムを使用して目的の変更を行ったことを確認することはできません。 。

xml設定ファイルの作成/編集は、コードを屈折させたり、データベーススキーマを変更したりするたびに、マッピングファイルを更新する必要があります。また、ファイルのマッピングを開始するのは非常に難しく、簡単な問題のように見えるものを追跡するのは時間がかかります。

は、多くのORMシステムのテンプレートが付属していますCodeSmithのようなコードジェネレータを使用します。

他の2つのオプションがあります。出力をカスタマイズする必要がない場合は、テンプレートを編集することができますが、単純なケースがあなたのために処理されます。データベーススキーマを変更して反復可能な結果を​​得るたびにコード生成プログラムを再実行するだけです。

ORMシステムの設定に流暢なインターフェイス(例:Fluent NHibernate)を使用すると、Xml設定ファイルが不要になります。ほとんどの場合、名前付け規則を使用してフィールドを列などにリンクすることができます。ドラッグ&ドロップデザイナーで始めますが、コードやデータベースのリファクタリングに合っていれば、長期的に支払うことになります。

また、データベースとコードの両方を生成するモデルを使用することもできます。 "モデル"はあなたのソースコードであり、バージョン管理下に置かれています。これは "Model Driven Development"と呼ばれ、各パターンのテンプレートを一度作成するだけで済むため、よりシンプルなパターンを持つクラスがたくさんある場合には効果的です。

+0

EFデザイナーは実際によく考えられています。データベースで行った変更の更新を実行することができ、スキーマ/オブジェクトに対して手動で行った変更を混乱させることはありません。 – ADB

0

私はiBattisが良いと聞いています。プログラマチームがHibernate(時間の問題)を理解できない場合、iBattisにはいくつかの企業が落ちています。

個人的には、私はまだ好きですLinq2Sql。はい、誰かがテーブルを削除して再描画する必要があるのは、あまりにも多くの作業のようですが、実際はそうではありません。そして、保存するときにクラスコードを更新しない時間は本当に苦痛ですが、テーブルを制御して再度ドラッグするだけです。トータルリメイクはとても素早く簡単です。作成するクラスは非常にシンプルです。 CRUDのSPを好きな人は、複数のテーブルエンティティを作成することもできます。

SPをCRUDにリンクすることはEFに似ています。テーブルと同じパラメータでSPをセットアップし、テーブルの上にドラッグしてデータタイプに一致させるだけです。

多くの人が離れてリポジトリからのIQueryableを取るために彼らの方法の外に出るが、IQueryableをがあまりにも悪くありませんので、あなた、linq2Sqlで何リンクを制限することができます。

それを考えると、関係(および外部キー)を制限する方法があるのだろうかと思います。

関連する問題