مقایسه بین ORM های ADO و Entity برای کار با دیتاگرید در WPF
برای یک برنامه حسابداری که عملیات insert , update , delete , search که به طور مستقیم در داخل یک دیتاگرید اتفاق می افتد چیست ؟
اگر با برنامه های اکسسی (MS Access) مخصوصا قدیمی ها که با adp (MS Access Data Project) کار کرده باشند میدونند که شما دقیقا مثل فضای اکسل با دیتابیس ارتباط بر قرار میکنید
دو روشی که من میشناسم :
1- ADO.NET => DataSet and TableAdapter :
در این روش خیلی ساده شما از طریق پنجره DataSource به دیتابیس وصل می شید، یکبار برنامه رو Build می کنید، سپس در سمت چپ جدول رو به صورت Drag&Drop میندازین داخل پنجره تون و دیتاگرید رو آماده با کد پس زمینه که در یزر گذاشتم میذاره , و فقط کافیه شما از طریق DataSet با دستور GetChanges دیتاتون رو سیو کنید. یعنی خودش کویری های مربوط به اون رو مسیازه و تمام !
private void LoadData()
{
nOTELBOOKDBDataSet = ((SIMPLE_MVVM.NOTELBOOKDBDataSet)(this.FindResource("nOTELBOOKDBDataSet")));
// Load data into the table PERSONEL. You can modify this code as needed.
nOTELBOOKDBDataSetPERSONELTableAdapter = new SIMPLE_MVVM.NOTELBOOKDBDataSetTableAdapters.PERSONELTableAdapter();
nOTELBOOKDBDataSetPERSONELTableAdapter.Fill(nOTELBOOKDBDataSet.PERSONEL);
System.Windows.Data.CollectionViewSource pERSONELViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("pERSONELViewSource")));
pERSONELViewSource.View.MoveCurrentToFirst();
}
void SaveData()
{
NOTELBOOKDBDataSet changes = (NOTELBOOKDBDataSet)nOTELBOOKDBDataSet.GetChanges();
if (changes != null)
{
//Data has changes.
//use update method in the adapter. it should update your datasource
int updatedRows = nOTELBOOKDBDataSetPERSONELTableAdapter.Update(changes);
nOTELBOOKDBDataSet.AcceptChanges();
}
}
2- Entity Framework =>SqlQuery :
در این روش هم یک مدل سی شارپ از دیتابیس میسازه و شما با اون مدل میتونید با Entity ها و دستورات SaveChanges البته با کد نویسی بیشتر اطلاعات رو دستی ذخیره کنید ولی شما احتمالا توی این روش با مدل داده ای سی شارپ کار می کنید یعنی LINQ , ولی وقتی از همین روش منتها با استفاده از دستورات اصلی اس کیو ال (Raw SQL) کار کنید میبینید که چقدر روش LINQ خیلی کند هست نسبت به SQL Query
public void LoadData()
{
using (DataModeling.Entities dbms = new DataModeling.Entities())
{
var RES = dbms.Database.SqlQuery<HUMANS_TBMODEL>("SELECT ID,NAME,TEL,REMARKS FROM PERSONEL").ToList();
foreach (var item in RES)
{
MY_ALL_HUMANS.Add(item);
}
}
}
با توجه به نیاز سادگی و راحتی در پیاده سازی و کد نویسی و همچنین سرعت , کدام روش بهتر است ؟
پاسخ هوش مصنوعی
برای برنامه حسابداری که عملیات insert، update، delete و search به طور مستقیم در داخل یک دیتاگرید انجام می شود، انتخاب بین ADO.NET و Entity Framework به نیازها و اولویت های پروژه شما بستگی دارد.
ADO.NET به دلیل سادگی در راه اندازی و استفاده و همچنین سرعت بیشتر برای عملیات داده ای که به طور مستقیم با دیتابیس ارتباط برقرار می کند، می تواند گزینه بهتری برای پیاده سازی هایی باشد که انتظار دارند عملکرد سریع تری داشته باشند. با استفاده از DataSet و TableAdapter، می توانید به سرعت داده ها را بارگذاری کرده و تغییرات را ذخیره کنید، بدون نیاز به نوشتن کد پیچیده.
private void LoadData()
{
nOTELBOOKDBDataSet = ((SIMPLE_MVVM.NOTELBOOKDBDataSet)(this.FindResource("nOTELBOOKDBDataSet")));
nOTELBOOKDBDataSetPERSONELTableAdapter = new SIMPLE_MVVM.NOTELBOOKDBDataSetTableAdapters.PERSONELTableAdapter();
nOTELBOOKDBDataSetPERSONELTableAdapter.Fill(nOTELBOOKDBDataSet.PERSONEL);
System.Windows.Data.CollectionViewSource pERSONELViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("pERSONELViewSource")));
pERSONELViewSource.View.MoveCurrentToFirst();
}
void SaveData()
{
NOTELBOOKDBDataSet changes = (NOTELBOOKDBDataSet)nOTELBOOKDBDataSet.GetChanges();
if (changes != null)
{
int updatedRows = nOTELBOOKDBDataSetPERSONELTableAdapter.Update(changes);
nOTELBOOKDBDataSet.AcceptChanges();
}
}
از سوی دیگر، Entity Framework قابلیت های بیشتری برای کار با داده ها ارایه می دهد. با استفاده از LINQ و مدل سازی شی گرا، می توانید به راحتی داده ها را مدیریت کنید، و این روش مناسب تر برای پروژه هایی است که نیاز به قابلیت های پیشرفته تری مانند lazy loading یا ارتباطات پیچیده بین موجودیت ها دارند. اما در این روش، ممکن است نیاز باشد که کد بیشتری برای انجام عملیات مختلف نوشته شود و عملکرد آن نسبت به ADO.NET ممکن است کمتر باشد.
public void LoadData()
{
using (DataModeling.Entities dbms = new DataModeling.Entities())
{
var RES = dbms.Database.SqlQuery<HUMANS_TBMODEL>("SELECT ID,NAME,TEL,REMARKS FROM PERSONEL").ToList();
foreach (var item in RES)
{
MY_ALL_HUMANS.Add(item);
}
}
}
در نهایت، اگر سادگی و سرعت برای شما در اولویت است، ADO.NET ممکن است بهترین گزینه باشد. اما اگر به دنبال کد تمیزتر و قابلیت های پیشرفته تر هستید، Entity Framework می تواند انتخاب مناسب تری باشد.
هر دو روش کارایی های خودشون رو دارند , اما خب Entity Framewoek جدید تر هست و مدیریت خطا توی اون راحت تر است
اما شما میتونید از ترکیب هردو استفاده کنید , در جاهایی که نیاز به کوئری های پیچیده دارید ADO راحتر خواهد بود
یک ابزار کوچکی هم نوشتم که میاد باتوجه به کوئری شما مدل سی شارپ رو از روی نتیجه اون کوئری تون میسازه :

Automatic Generate CSharp Model Of Sql Server Table in C# WPF
در انتهای همین پست داخل این لینک سورسش هم هست
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- حذف کامل یک رکورد در جدول ریلیشن شده
- مقایسه ساختار دو دیتابیس در Sql Server
- اشکال در ایجاد کلید خارجی در Sql Server
- تفاوت اوراکل و Sql Server چیست
- رفع خطا در مایگریشن - Specify ON DELETE NO ACTION or ON UPDATE NO ACTION
- جابه جایی سطر و ستون در Sql Server
- استفاده از Stored Procedure در انتیتی فریم ورک code First
- آپدیت لیستی از رکوردها در Sql Server - آپدیت گروهی اطلاعات در Sql Server
- دلیل پرش 1000 تایی خودکار فیلد identity در Sql server
- مشکل نمایش ندادن Data Type موقع تایپ در Sql Server