. NET için Varlık Framwework gibi ORM DEĞİL

3 Cevap php

Ne gerçekten varlık çerçevesi hakkında ne gibi onun drag ve uygulamanın tüm model katmanını oluşturan damla yoludur. Sen tabloları seçin, onları katılır ve bitirdiniz. > Güncelleme ve yine bitirdiniz - Eğer veritabanı scheda güncelleştirmek, sağ tıklatın.

Bu (n) Hazırda gerektirir XML karışıklık veya sabit-güncelleştirmenin Django Modeller gibi, bana competiting ORMs önde kilometre görünüyor.

Belki bazen haritalama işlemi üzerinde daha fazla kontrol iyi olabilir aslında konsantre olmadan, dilleri veya çerçeveleri programlama (Python veya php gibi çoğunlukla açık kaynak), diğer benzer tek-tıklama (veya tek bir komut) çözümleri vardır?

Teşekkürler

3 Cevap

SQLAlchemy veritabanı yansıma yarım orada alır. Hala sınıfları ve bunlar arasındaki ilişkileri bildirmek zorunda olacak. Aslında kolayca çok sınıfları autogenerate olabilir, ama siz de elle sınıflar bildirmek olabilir bu yüzden hala bir şekilde ilişkilerini isim gerekir.

Kurulum kodu veritabanı, bu gibi bir şey olacaktır:

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')

Üretim kodu, muhtemelen bir şekilde yansıyan veritabanı meta önbelleğe isterdim. Gibi örneğin bir dosyaya turşu:

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'))

Ben "sürükle ve bırak" gibi veri erişim kodu oluşturmak gerekmez.

İlk bakışta kolay gibi görünüyor, ama sonra veritabanına bir değişiklik yapmak ve veri erişim kodu güncellemek gerekiyor. Bu sık sık daha önce yaptıklarını yinelemek zorunda gibi, sert olur, ya da El düzenleme sürükle / bırak tasarımcı oluşturulan kod nerede. Bir sürükle / bırak tasarımcı ile bir alan haritalama için bir değişiklik yapmak çoğu zaman, çıkış dosyası ilgisiz hatları değişiklikler var, bu nedenle size amaçlanan değişiklik yapmak (ve başka hiçbir şeyi değiştirmez) onaylamak için kaynak kodu kontrol sistemi kullanamazsınız .

Ancak dosyalarını yapılandırmak / düzenleme xml oluşturmak zorunda kodunuzu refrakter veya eşleme dosyasını güncelleştirmek için veritabanı şemasını değiştirmek her zaman güzel değildir. Bu eşleme dosyaları ile başladı ve basit bir sorun yaş alabilir benzediğini izini almak için de çok zordur.

Diğer iki seçenek vardır:

Gibi bir kod jeneratör kullanmak CodeSmith birçok ORM sistemleri için şablonları ile birlikte geliyor. Eğer çıktısını özelleştirmek için gerektiğinde (değilse) Eğer şablonu düzenleyebilirsiniz, ama basit durumda sizin için halledilir. Yani sadece kod üreteci veritabanı şemasını değiştirmek her zaman yeniden çalıştırın ve tekrarlanabilir bir sonuç almak yollar.

Ve / veya akıcı arayüz kullanımı (örneğin, Fluent NHibernate) ORM sistemi yapılandırmak için, bu Xml yapılandırma dosyası ve çoğu durumda vb sütunlara alanlarını bağlamak için adlandırma kullanabilirsiniz gereksinimini ortadan kaldırır Bu olacak daha sonra bir sürükle / bırak tasarımcı ile başlamak için ancak kodu veya veritabanı üstlenmeden maç yoksa uzun vadede ödeyecek.

Başka bir seçenek sizin veritabanı ve kod üretmek hem de bir model kullanmaktır. "Model" kaynak kodu ve versiyon kontrol altında tutulur. Bu "Model Driven Development" denir ve sadece bir kez, her model için bir şablon oluşturmak için ihtiyaç olarak, basit desenler var sınıflar sürü varsa büyük olabilir.

Ben iBattis iyi duydum. Onların programcı ekipleri Hibernate (zaman sorunu) anlama yeteneğine sahip değilken Birkaç şirket geri iBattis düşer.

Şahsen, ben hala seviyorum Linq2Sql. Evet, biri bir masanın üzerinde silmek ve redrag gereken ilk kez çok iş gibi görünüyor, ama gerçekten değil. Ve kaydetmek zaman sizin sınıf kodu güncelleme olmadığı zaman gerçekten bir ağrı olduğunu, ancak sadece tabloları-bir kontrol ve tekrar üzerine sürükleyin. Toplam remakes çok hızlı ve ağrısızdır. Oluşturduğu sınıflar son derece basittir. Eğer CRUD için SP'leri İsterseniz bile çoklu tablo varlıkları oluşturabilirsiniz.

CRUD için SP'ler Bağlama EF benzer: masanızdaki olarak aynı parametrelerle Siz sadece kurulum SP, sonra masanın üzerine sürükleyin ve puf, bu veri türleri ile eşleşir.

Birçok insan uzak deposundan IQueryable çekmek için kendi yolumdan gitmek, ama IQueryable çok kötü değil yani can, LINQ2SQL içinde ne link sınırlamak.

Düşününce gel, ben ilişkileri (ve yabancı anahtarlar) sınırlamak için bir yol olup olmadığını merak ediyorum.