2009-11-08 22 views
5

Birçok ürün geliştiricisi, SQL sunucusu, Oracle, DB2, MySql gibi herhangi bir popüler RDBMS ile sorunsuz bir şekilde çalışacak bir .NET uygulaması yazmak istiyor. Veri uygulama bloğunu kullanırsak, konfigürasyona bağlı olarak veritabanı sürücüsünü dinamik olarak seçer (OracleClient, SQLClient veya OleDBClient). Bununla birlikte, tüm veritabanlarının kendine özgü bir SQL özelliği vardır. Bir SQL kod tabanının evrensel olarak kullanılmasını engelleyen ince farklar vardır - işlev adları farklıdır, tarihlerin ele alınış şekli farklıdır, Kimlik sütunları ele alınma şekli farklıdır ve böyle devam eder. Önceden tanımlanmış çıkış sıralarını kullanarak DB nötr kodunu yazmak için Data Direct'den üçüncü taraf bir ürün kullanabilir.Veritabanı tarafsız .NET uygulaması

Microsoft, bu soruna yönelik herhangi bir araç veya ürün var mı?

cevap

12

Microsoft ADO.NET Entity Framework, Microsoft'tan (bir şekilde) DB-agnostik (kod) kod yazmanıza izin veren bir Object-Relational Mapping altyapısıdır. Pek çok (örneğin, MySQL, Postgres) için .NET Framework yüklemenizden ayrı bir şey indirmeniz gerekmesine rağmen, tüm önemli DBMS'ler Entity Framework için destek sahibidir.

Not: Henüz DB'ye özgü işlevler için veya yerel SQL'e dışa aktarmamız gereken en az bir durumun olmadığı bir O/RM aracı kullanarak tek bir büyük proje üzerinde çalışmam gerekiyor. performans nedenleri (iyi bir sorgu planı elde etmek için belirli bir şekilde bir sorgu yazmak için gerekli). Ama iyi bir O/RM, SQL yazmak zorunda kalmamak için çoğu zaman işe yarayabilir. sözü

, Varlık Framework geçerli sürümü hemen hemen daha olgun, "olgun" daha derin bir yelpazede destek anlamına gelirken vb NHibernate, SubSonic gibi dimensions-- diğer O/RM çerçeveler bir dizi sınırlıdır DBMS, yerel SQL'e, daha geniş bir topluluk desteğine, daha iyi performansa vb. sahip olmak zorunda kalmadan, bu özelliklerin gerçek bir dünya için görece karmaşık bir proje olduğunu düşünmüyorum. Varlık Çerçevesinin geçerli sürümü, mevcut diğer O/RM araçlarına göre gitmek için en iyi yoldur.

Görünüşe göre, gelecek .NET 4.0/VS2010 version of the Microsoft Entity Framework çok gelişti, bu nedenle yukarıdaki ifade doğru olmayabilir. Yeni Entity Framework, örneğin DDL için destek ekler, böylece DBMS'den bağımsız bir şekilde tablolar ve dizinler oluşturabilirsiniz. Ayrıca, .NET 4.0 Varlık Çerçevesi, harici bir sınamada tutulması gereken O/RM sarmalayıcıları gibi şeyler için önemli olan, oluşturma zamanında kodu otomatik oluşturmak için temiz bir özellik olan T4 Templates adlı bir özellikten yararlanıyor. DB şeması - ve daha iyi (önceden derlenmiş) performans, çalışma zamanına kadar veritabanı sütunlarının türlerini bilmeyen O/RM araçlarından daha iyi sonuç vermelidir.

+0

+1 İyi ve kapsamlı bir cevap. Şu anda EF'nin sadece RDBMS'leri desteklediğine dikkat etmek faydalı olabilir. OP'nin sorduğu şey buydu, bu yüzden cevabınızla ilgili hiçbir sorunum yok, fakat sadece bir RESTful hizmeti aracılığıyla veriye veya bir ilişkisel olmayan ilişkiye ihtiyacınız varsa EF'in size yardımcı olmayacağını belirtmek istiyorum. veri kaynakları. Varlık Framework: –

+0

EntityFramework * MS doğrudan bir ORM * olduğunu Orada Informix (Şeytan'ın kendi veritabanı) –

1

Doğrudan Microsoft'tan değil. Bu araçlar genellikle Object-Relational Mappers veya kısa ORM olarak adlandırılır. Örneğin NHibernate, ihtiyaçlarınızı karşılayacağından emin olduğunuz yaygın ve yaygın bir ORM'dir. Tabii ki Telerik OpenAccess ORM, DevExpress XPO veya DataAbject DataAbstract gibi diğer ticari ürünler de veritabanı agnostik olmanıza yardımcı olacak.

+0

ile çalışmaz. –

+0

ORMs bir başka yönü (isme, akla gelen iki şey işlem ve LOB taşıma) sadece birini kullanabilirsiniz "standart" SQL, aynı zamanda sırf sen kaydedebilirsiniz Demirbaş kodunun miktar değil. – davek

2

Anladığım gibi, RDBMS'den bağımsız SQL yazmak için bir araç arıyorsunuz ama bir ORM değil. Bu, farklı ORM satıcıları tarafından farklı yollarla çözülen çok gerçek bir sorundur. ORM - DataObjects.Net için geliştirilmiş olan XtensiveSQL DOM aracından bahsedebilirim. Tam özellikli DOM modelini kullanarak sorgu yazmak için SQL üzerinden bir soyutlamadır. Şu anda SQL DOM, DataObjects.Net'ten ayrı olarak tanıtılmamaktadır, ancak açık kaynak kodlu bir üründür ve sizden yazarlarına bu konuda kesinlikle soru sorabilirsiniz.Bildiğim kadarıyla bazı üçüncü şahıs projelerinde başarıyla kullanılıyor.

İlgili konular