Burada yer alan notları PDC 2008 de yapılan EF sunumundan yola çıkarak oluşturdum. Sunumun orijinali burada
-
ORM, OOP ve DDD ile ilgili önemli adamlar olan Martin Fowler ve Eric Evans ile ciddi görüşmeler yapılmış. Bu da EF’nin altının çok boş olmadığını gösteriyor
- EF sadece bir ORM frameworkü değil
- EF reporting services, OLAP, OLTP, Anlysis Services gibi diğer teknolojileri de desteklemeyi hedefliyor
- EF toolları doğal olarak Visual Studio’ya entegre edilmiş durumda.
- Oslo (Cloud) gibi çok değişik senaryoları da cover edeceği vaad ediliyor
- Convention over configuration lafı bolca geçiyor, bu da güzel birşey.
- Persistence ignorance güzel olmuş; convention over configuration ve attribute kullanımı ile sağlnaıyor temel olarak, xml ile konfigürasyon yapma işi yok
- LINQ desteği tabii ki var
- Obje modelinden database modelinin oluşturulması işi üzerinde bugüne kadar çok ciddi şeyler göremiyorduk (NHibernate de schema generation tool var fakat Visual Studio EF designer ile yarışabilir mi acaba?), biz hep tersini yapmaya çalışıyorduk fakat EF ile obje modelinden database generate edebiliyoruz. Daha önce de dediğim gibi EF sadece bir ORM değil.
- Complex Type tanımlama imkanı var. NHibernate’de bunun karşılığı Composite Element tanımlamak. Örneğin FullName classı içinde Name, Surname tanımlayıp bunları obje modelinde FullName classının instance’ı olarak görüp database tarafında da iki ayrı kolon olarak ele alabiliyoruz. Buna daha iyi örnek inline tutulan adres bilgilerinin composite bir type olarak tanımlanıp kullanılması.
- Code generation (Artifact pipeline denilen bir sürecin bir parçası) için T4 Templatelerinin (Text Template Transformation Toolkit) kullanımı mümkün, böylece EF ile çalışabilen çok değişik toollar geliştirilebilir.
- EF modellerini DB adminlerin üretmesi/oluşturması ve yönetmesi mümkün. Böylece application developerlar doğrudan bu EF modellerini kullanarak OO uygulamalar/sistemler geliştirebilecekler, data ve data modeli ile db adminler ilgilenecek.
- Table valued fonksiyonlar destekleniyor.
- Model defined functions denilen bir olayı var. Bu özelliği business rulları veritabanında değil aplikasyon tarafında oluşturmak için kullanabilirz.
- EF modelinden DBExpression üretip ExceuteQuery ile DataReader elde edebiliyoruz. Böylece EF’yi objelerle değil rowlarla çalışan, reporting services gibi, diğer teknolojilerle de kullanabiliyoruz. Bu özellik yeni icat edilmiş birşey değil bu arada, SubSonic mesela bunu çok başarılı bir şekilde yapan ORM’lerden sadece bir tanesi.
- Caching için Velocity kullanması söz konusu.
- Lazy loading ile ilgili standard şeyleri implemente etmişler.
- Eager Loading ile ilgili taşları henüz yerine oturtamamışlar.
- Enumların nasıl map edileceği ile ilgili çok net birşey yok.
- Many-to-many relationlarda şu anda bağlantı tablosu bir Entity olarak ele alınmıyor ana tabloları ifade eden etityler üzerinde collectionlar ile olay hallediliyor, fakat bağlantı tablosu bağlantı bilgisi dışında başka bilgiler (pay load) de taşıdığında bunun da bir entity olarak ifade edilmesi ihtiyacı ortaya çıkıyor. Bu durumla ilgili değişik yaklaşımları (AssoicationEntity) değerlendireceklermiş.
- LinqToSQL ve EF arasında ciddi performans farkı olduğu söyleniyor, EF’nin LinqToSQL’dan daha kötü performansa sahip olduğu şeklindeki genel görüşe çok itibar etmiyorlar ve performans iyileştirme çalışmalarının devam ettiğini söylüyorlar.
NOT: ADO.NET Entity Framework şu anda Beta 3, yani production’da kullanabilmek için beklemek gerekecektir.