aldığım adreside eklimde ordanda bakabilir arkadaşlar
http://ihsanindefteri.blogspot.com/2009/02/nhibernate-entity-framework-adonet-35.html
Çoğu arkadaşımız projelerinde Nhibernate mi yoksa Entity Framework mu
tercih etsem diye bir karar noktasına gelir. İnterntte gezerken
bunları kaşılaştıran bir yazı buldum. Hep birlikte okuyalım diye
buraya ekliyorum. Ve tabiki her zamanki gib tartışacaz:)
Nhibernate ve ADO.NET Entity Framework Karşılaştırması
1. Kriter : Visual studio entegrasyonu
a. Entity Framework Visual studio entegrasyonu ve araçları;
Visual studio 2008 sp1 kullanarak, db deki tablolar objelerle map
edilebilir, bunlar arasındaki ilişkiler entity designer kullanılarak
kurulabilir, değiştirilebilir, objectlerden tablolar, tablolardan
objectler generate edilebilir. Oluşturulan objeler serialize
edilebilir.
Model browser; oluşturulan modellere ait detayları görüntüler,
Mapping details, oluşturulan modellerin db tablolarıyla olan
eşleşmelerini görüntüler ve değiştirmemize yardımcı olur.
Entity Data Model Designer; Oluşturulan modellerin arasındaki
ilişkileri düzenlememizi, yeni ilişki atayabilmemizi, başka bir
classdan inherit edebilmemizi, yeni scaler proprerty oluşturabilmemizi
sağlar.
Entity Wizard Data Model Wizard; http://msdn.microsoft.com/en-us/library/bb399247.aspx
linkinde mevcut.
DB deki Table'larla map edildiği için düzgün yapılmış bir db
tasarımıyla foreign key lere bakarak uygun ilişkileri kurmamızı
sağlar. Bu ilişkiler class diyagramı halinde görüntülenebilir.
b. Nhibernate Vusial studio entegrasyonu:
Nhibernate de hbm.xml dosyaları oluşturulduktan sonra vs2008'in xml
editörü kullanılarak kolayca düzenlenebilir. Oluşturulan classlar
class view ile rahatlıkla görüntülenebilir. Nhybernate'e başka bir
third party kullanmadan VS2008 ile entegre olduğu söylenemez. Ancak
nHibernate LINQ ile de kullanılabilir. Detaylar :
http://www.hookedonlinq.com/LINQToNHibernate.ashx
http://ayende.com/Blog/archive/2007/03/17/Implementing-Linq-for-NHibernate-A-How-To-Guide--Part.aspx
adreslerinde mevcut.
2. Kriter : Kod generation
a. Entity Framework Kod generation ;
EF kullanmak için oluşturulması gerken şey edmx dosyasının
oluşturulması. Eğer edmx dosya boyutunun büyüme durumu sıkıntı
yaratırsa (Bu konuda bi sorun yaşandığını okumadım ama olası durumları
göz önünde bulunduruyorum) Projeye ait bütün tablolar tek bir entity
data model içinde oluşturulabillir, yada modül halde gruplanarak
oluşturulabilir. edmx generate etmenin birden fazla yolu var,
tabloları sürüklemek yada komut satırından generate etmek gibi.
Ayrıntılar için (http://blogs.msdn.com/dsimmons/pages/entity-framework-
faq.aspx ) - sık sorulan sorular.
b. nHibernate kod generation
MyGeneration, Codes gibi araçlar kullanılarak .net code generation
yapılabilir. nHibernate'in kendi kod generater'ı da var. Hibernate
Extensions package içinde mevcut ancak java için kod generate ediyor.
Bu generator'ın xml kısmı kullanılabilir. Kaynak : nHibernate
reference guide.
3. Kriter : Generic / third party ?
a. Entity framework microsoft tarafından yazılmış ve yine microsoft
tarafından desteği verilen bir araç. Ek bir uygulama gerekmiyor.
Desteğini microsftun veriyor olması özelliğinin bize güven vermesi
gerekir.
b. nHibernate açık kaynak bir araç ancak desteği microsoft tarafından
sağlanmıyor . Web sitesinde :"Copyright 2006, Red Hat Middleware, LLC.
All rights reserved. JBoss and Hibernate are registered trademarks and
servicemarks of Red Hat, Inc." ifadesi mevcut. Burdan redhat inc'ye
ait olduğu kanısına varabiliriz. Açık kaynak olması avantaj, ancak
açık kaynak projeleri customize edebilmek için proje yapısının büyük
bölümünü öğrenmemiz gerekir ki farkında olmadan projedeki başka
yerleri bozma ihtimalimiz de var.
4. Kriter : sql query tuning
a. Entity framework LINQ to Entity framework kullanırsak objelerin
getirmek istediğimiz kolonlarına ait veriye ulaşabiliyoruz. Bu sayede
gereksiz veri çekme işleminden kurtulabiliriz. Bu durumda da sorun
çıkarısa linq to sql'i de kullanabiliriz.
b. nHibernate
HQL ile sorgu yazarsak query tuning mümkün, ancak objelerin sadece
isediğimiz property'lerini doldurmamız durumunu desteklemiyor.
5. Kriter : DB bağımsız çalışabilme (amaçlanan oracle ve mssql)
a. Entity framework SQL 2005 / 2008, Oracle, MySQL ve PostgreSQLsp1
güncellemesiyle sql server 2008 deki yeni fieldtype'lara da destek
veriyor.
b. nHibernatesql 2008 listede yok ama başka bi yazda sql2008
DB2 7.1, 7.2, 8.1, 9.1
Microsoft SQL Server 2000
Sybase 12.5 (JConnect 5.5)
MySQL 3.23, 4.0, 4.1, 5.0
PostgreSQL 7.1.2, 7.2, 7.3, 7.4, 8.0, 8.1
TimesTen 5.1, 6.0
HypersonicSQL 1.61, 1.7.0, 1.7.2, 1.7.3, 1.8
SAP DB 7.3
InterSystems Cache' 2007.1
Veri tabanlarına destek verdiğini söylüyor.
Hibernate'in sitesinde aşağıdaki db versiyonlarıyla da test edildiğine
dair bilgi yer almakta.
Apache Derby
HP NonStop SQL/MX 2.0 (requires Dialect from HP)
Firebird (1.5 with JayBird 1.01 tested)
FrontBase
Informix
Ingres
Interbase (6.0.1 tested)
Mckoi SQL
Pointbase Embedded (4.3 tested)
Progress 9
Microsoft Access version from 95, 97, 2000, XP, 2002, to 2003
(requires Dialect from HXTT)
Corel Paradox version from 3.0, 3.5, 4.x, 5.x, 7.x to 11.x (requires
Dialect from HXTT)
flat text , CSV file, TSV file, fixed-length, and variable-length
binary file (requires Dialect from HXTT)
Xbase database (dbase, Visual DBASE, SIx Driver, SoftC, Codebase,
Clipper, Foxbase, Foxpro, VFP(3.0,5.0,7.0,8.0,9.0, 10), xHarbour,
Halcyon, Apollo, Goldmine, and BDE) (requires Dialect from HXTT)
Microsoft Excel version from 5.0, 95, 97, 98, 2000, 2001, 2002, 2003,
to 2004 (requires Dialect from HXTT)
6. Kriter : build esnasinda olasi kod hatalarini görüntüleyebilme
yetenegi.
a. Entity frameworkEntity'ler db tablolarından generate edildiğinden
mapping'i biliyoruz ve bu mappinge ait bilgileri kod yazarkende
kullanabiliyoruz. Projeyi bir kere build ettiğimizde build - time'da
hatayı görebiliriz, sorguları string ifadeler içinde yazmadığımız
sürece. Typeddatasetlerde olduğu gibi entity property'lerinden LINQ
ile sorgulama yaptığımız için db objectlerindeki hataları projeyi
publish etmeden yada production a almadan önce görebilme imkanımız
var. Ayrıca linq sorglama dili intellisense desteği olan bir dil.
b. nHibernate;HQL'de intellisense desteği yok ve LINQ gibi dile
entegre değil. HQL yazmak yada test etmek için stabil çalışan bir
aracı şimdilik bulamadık. Sorguları oluştururken string ifadeler
kullanırsak build esnasında bu ifadelerin içindeki hataları
görüntüleyemeyebiliriz. Kodda ilgili yere gelinceye kadar projede hata
yokmuş gibi çalışabilir ve ilgili yere gelince hata alabiliriz. Sorgu
kriteri oluşturmada linq yada query generator adlı aracı
kullanabiliriz.
http://cromwellhaus.com/blogs/ryanc/archive/2007/11/19/nhibernate-query-generator-with-visual-studio-2008.aspx
(query generator)
http://www.hookedonlinq.com/LINQToNHibernate.ashx (LINQ to nHibernate)
7. Kriter : destekler, çikarilan bugfixler / bizim düzeltme olanagimiz
a. Entity framework;
i. Microsoft, .net Framework içinden aşağıdaki librarylerin source
koduna erişmemize ve değiştirmemize olanak sağlıyor. .NET Base Class
Kütüphanaleri (System, System.CodeDom, system.Collections,
System.ComponentModel, System.Diagnostics, System.Drawing,
System.Globalization, System.IO, System.Net, System.Reflection,
System.Runtime, System.Security, System.Text, System.Threading, vs).
ASP.NET (System.Web, System.Web.Extensions)
Windows Forms (System.Windows.Forms) Windows Presentation Foundation
(System.Windows) ADO.NET ve XML (System.Data ve System.Xml)
Çok yakında diğer sınıfların da zaman içerisinde paylaşıma açılacağı
duyrulmuş.
Ayrıntılar için ;
http://daron.yondem.com/tr/PermaLink.aspx?guid=d23bbb25-5fdf-4599-824a-cb8f8931fa3d
Desteğini Microsoft veriyor. Sp1 de birçok bug giderilmiş.
b. nHybernate
i. Tüm proje açık kaynak. Son versiyonun release date'i 2008-09-29
8. Kriter : caching,
a. nHibernate
i. First level cache, daha önce sorgulanan yada insert edilen
verilerin tekrar dbden sorgulanmasını engeller. Yararlı bir yapı.
ii. Second level cache; true key'ini configuration dosyasına
ekleyerek, key'ini de entity map dosyamıza ekleyerek kullanabiliriz.
b. Entity framework
i. Caching'i biz yönetiyoruz.
9. Kriter : auditing,
a. nHibernate
i. IInterceptor interface'I otomatik olarak save,update,delete yada
load durumunda bazı bilgileri tutuyor. (auditing bilgisinin database'e
yazılmasıyla ilgili bişey göremedim)
b. Entity Framework;
i. Her entity'ye ait olan EntityState property'sini kullanarak entity
durumunu öğrenebiliriz, bu durumlara ait değişikliği yönetebiliriz.
(Detaylar http://blogs.msdn.com/efdesign/archive/2008/11/20/n-tier-improvements-for-entity-framework.aspx
adresinde)
ii. Auditing ile ilgili bir soruya verilmiş bir cevap :
http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/b906a246-8bec-4d07-83b1-4ce6a91adc95/
10. Kriter : Concurrency,
a. entity framework
i. http://msdn.microsoft.com/en-us/library/bb738618.aspx adresinde
managing concurrency adlı bir döküman var.
b. nHibernate
i. Reference guide'da Optimistic concurrency control başlığında 10.
Chapter da açıklanmış.
11. Kriter : Transactions,
a. nHibernate
i. reference guide Transactions başlığında 10. Chapter da açıklanmış.
b. Entity framework
i. http://msdn.microsoft.com/en-us/library/bb738540.aspx adresinde
açıklanmış
c.
12. Kriter : query api
a. nHibernate
i. HQL ve criterias.add ile kriter oluşturma
ii. Ayrıca LINQ to nHibernate ile ilgili ayrıntılar :
http://www.hookedonlinq.com/LINQToNHibernate.ashx
b. Entity framework
i. Entity SQL, LINQ Queries, LINQ to Entities.
ii. Detaylar için: http://blogs.msdn.com/diego/archive/2007/11/11/choosing-an-entity-framework-api.aspx
13. Kriter : teknolojinin olgunlugu
a. nHibernate 1.0 release date : Ekim 12, 2005, son release date'i:
2008-09-29
b. Entity framework release date: 11 Ağustos 2008 (framework 3.5 sp1
ile birlikte)
14. Spatial Data Type Desteği
a. Nhibernate için ;
i. http://nhforge.org/wikis/spatial/introduction.aspx linkinde mevcut.
ii. NHibernate.Spatial, spatial extensions for NHibernate, allows you
to connect NHibernate to a spatially enabled database and manipulate
geometries in HQL or in .NET code using NetTopologySuite, providing
you with a fully integrated GIS programming experience.
iii. http://www.codeplex.com/NHibernateSpatial/Thread/List.aspx
linkindede bazı bilgiler mevcut.
b. Entity framework için ;
i. Entity framework spatial data type'ı bir User Defined Type
olduğudan şu anki sürümünde doğrudan desteklemiyor. Ancak
http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/b0ac34d7-91de-4af9-8064-af4625fd6a25/
linkinde binary yada image olarak okunduktan sonar partial class
kullanarak SQLGeography sınıfının kullanılabildiği yazıyor.
15. Entity framework'e geçiş durumunda zaman kazandırma ; hql e
karşılık linq yazmanın zaman kazandıracağı ortada. nHibernate de kod
generator kullanmadığımızı varsayarsak biçok şeyi entity framework
bizim için generate ediyor. Ancak bu durumlarda ne kadar zaman
kazandıracağını hesaplamak pek mümkün görünmüyor
16. Lazy loading
a. Entity framework;
i. Varsayılan olarak lazy load aktif değil, bu işlem için çok fazla
kod yazmak gerekmiyor, Örnek için:
http://www.singingeels.com/Articles/Entity_Framework_and_Lazy_Loading.aspx
b. nHibernate ;
i. xml de lazy=true / false ile yapılabiliyor. Code behind'da nasıl
yapıldığını anlamadım.
17. Diğer ORM Araçları
NET Persistence,BBADataObjects ,DataObjects.NET ,Data Tier Modeler
for .NET ,DotNorm ,Eldorado.NET ,Enterprise Core Objects
(ECO(tm)) ,Entity Broker ,eXpress ,ersistent Objects
for .NET ,FastObjects.NET ,JC Persistent Framework ,LLBLGen
Pro ,ModelWorks ,Nhibernate ,Nolics.NET ,Norm ,Norpheme ,ObjectBroker ,ObjectSpaces ,ObjectSpark ,Objectz.NET ,OJB.NET ,OPF.Net
(Object Persistent Framework) ,ORM.NET ,Pragmatier Data Tier
Builder ,RapTier ,Sisyphus Persistence
Framework ,TierDeveloper ,Bob.NET ,ObjectPersistor.NET ,Genome
18. Entity framework başarılı projeler :
Türkiye'den bulduğum www.ttnetoyun.com.tr . Proje hakkında yazdığım
mail ve verilen cevap şöyle;
Merhabalar, Adım ihsan akın, bir şirkette yeni bi projeye başlamak
için hazırlık sürecindeyiz. entity framework'ü kullanmak istiyoruz
ancak daha önce yaşayan bi projedeki sorunlarının ne olduğunu merak
ediyorum. Bu konuda bi açıklama yapabilir misiniz? en sık hangi
sorunla karşılaştınız, nasıl çözdünüz? framework 3.5 sp1 ile birlikte
karşılaştığınız sorunlar yada bug'lar giderildimi? biraz da proje
büyüklüğünden ve yapısından bahsederseniz çok sevinirim. şimdiden
teşekkürler.
Merhaba, Açıkcası yazıda da değindiğim gibi ORM çok hakim olduğum bir
konu değil. Yazılım mimarımızın önerisiyle bu işe girdik ve EF bizi
yarı yolda bırakmadı. EF'yi kullandığımız TTNetOyun projesi şu an
canlıya alındı ve hiçbir sorun yaşatmadan çalışıyor, ttnetmüzik ve
ttnetvideo ile ortak bir login sistemi geliştirildi yine EF
kullanılarak onda da bir sorun yok. Şahsen bir görüş bildiremem ama,
TTNet gibi büyük ve milyonlarca kullanıcısı olan bir şirketin
projelerinde Innova olarak EF yi kullanmakta bir sakınca görmüyor
yazılım mimarlarımız. Yaşadığımız problemler ilk zamanlar internette
yeterli kaynak olmamasından kaynaklanıyordu, öğrenme sürecinde
zorlandık. Bir de daha yeni olduğu için linq to sql in desteklediği
her şeyi linq to entity henüz desteklemiyor, ama bu sorun bizim
önümüzü ciddi manada hiç kesmedi. EF sp1 ile zaten betadan kurtuldu,
dizaynırında ufak can sıkan buglar var en çok gözümüze çarpan ama bir
sonraki sürümde bunları da gidereceklerini umuyoruz.Daha fazla bilgi
vermek isterdim ama benim de bilgim henüz kısıtlı EF hakkında, umarım
yardımcı olabilmişimdir.
MSDN Forums 'a yazdığım post ve cevabı;
Dear all,
We are preparing for a new project. This project will be database
driven web application. We have make a decision about using ORM. We
have questions about "is Entity framework ready for large project?".
Anyone use entity framework in a real project? if you ask what is a
big project, project may have About 1000 users. Our another option is
using nHibernate for ORM. Anyone compare those? I found a project
developed in Turkey. but its not enought for me.
Thanks in advance.
Ihsan
Cevap :
I'm not sure the number of users is that relevant, maybe you mean
number of concurrent users, and if so, it matters if you refer to 1000
concurrent users that works in client-server mode (application to db
via EF) or are you talking about smart clients that uses services to
access the db.
Our application doesn't service 1000 users, but it does hold a
considerably large model (a few hundred entity types) and we've been
working with EF for over a year - we have written a lot of code to
handle EF through services, but the EF core remained intact and
working quite well.
Elimizde nHibernate reference guide var ancak böyle bi klavuz kayıtlı
olmadığından entity framework ile ilgili kaynaklara aşağıdaki
linklerden erişebiliriz.
ADO.NET Entity framework Overview http://msdn.microsoft.com/en-us/library/bb399572.aspx
Entity framework programming guide : http://msdn.microsoft.com/en-us/library/bb738553.aspx
Feature Reference (Entity Framework) http://msdn.microsoft.com/en-us/library/bb738623.aspx
Introduction to LINQ http://msdn.microsoft.com/en-us/library/bb397926.aspx
Sınırlı kaynağımız olduğu gibi bi durumda artık görünmüyor sadece msdn
den gelen sonuçlarına http://www.google.com.tr/search?hl=tr&q=entity+framework+site%3Asocial.msdn.microsoft.com&meta=
linkinden ulaşabiliriz.
una bizzat tanık oldum. Kendim de zaman zaman her iki urunde de zorlandıgım noktalara denk geldim. Hatta gecenlerde gene burda senle konusmustuk Tuna
Zaman kazanci == Code.Gen bence bu isin en minimal getirisi. Asil getiri uzun vadede yonetilebilir uygulama olarak donuyor olmasi lazim, oyle degilse zaten ADO.NET mantiginda ORM kullanilmis olur.
The advantages of using stored procedures are:
1) Network Bandwidth: Assume that the application server(s) and the database server(s) are separate servers. Since the source code is actually stored on the database server, the application only needs to send the name and the parameters for executing it and this in turn reduces the amount of data that is sent to the server. When you use embedded SQL or dynamically generated SQL through an ORM, then the full source of commands must be transmitted and in a scenario where there is a lot of concurrent activity going on and the load on the system requires a lot of users, this can very soon become a performance bottleneck. This can be mitigate in part by a judicious usage of views as well.
2) Abstraction Layer: It helps in separating the business logic from data manipulation logic. Since the interface to the application remains the same, changes done internally to the stored procedures/packages do not effect the application and in turn leads to easy deployment of changes.
3) It offers simplified batching of the commands. Since stored procedures/packages are meant to do a “Unit of Work”, this procedural logic can be simple to maintain and offers additional advantages like making use of the rich feature functionality that the database engines provide. SQL is a SET based language and using SET based procedural logic is the easiest and most performant way of dealing with the data. With every new release of Oracle, SQL Server or DB2 LUW, new features are being introduced in PL/SQL, T-SQL and/or SQL/PL which makes handling of different types of requirements very easy in the DB layer code.
4) Increased data security and integrity: One can secure the tables for direct access and only grant privileges on the stored procedures/packages.
5) By using bind variables (parameterized queries), SQL injection issues are mitigated as well.
6) Code Instrumentation and tracing logic can be built in very easily using the stored procedures. This is one thing that we implemented for one of our clients recently. We created a table which had a list of the DB code that was being used in the schema and this table had a trace_flag column in it which could have 4 different values:
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "altdotnetturkiye" group.
To post to this group, send email to altdotne...@googlegroups.com
To unsubscribe from this group, send email to altdotnetturki...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/altdotnetturkiye?hl=en
-~----------~----~----~----~------~----~------~--~---