مقایسه بین 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);
}
}
}
با توجه به نیاز سادگی و راحتی در پیاده سازی و کد نویسی و همچنین سرعت , کدام روش بهتر است ؟
هر دو روش کارایی های خودشون رو دارند , اما خب Entity Framewoek جدید تر هست و مدیریت خطا توی اون راحت تر است
اما شما میتونید از ترکیب هردو استفاده کنید , در جاهایی که نیاز به کوئری های پیچیده دارید ADO راحتر خواهد بود
یک ابزار کوچکی هم نوشتم که میاد باتوجه به کوئری شما مدل سی شارپ رو از روی نتیجه اون کوئری تون میسازه :
Automatic Generate CSharp Model Of Sql Server Table in C# WPF
در انتهای همین پست داخل این لینک سورسش هم هست
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- نمایش صفحه در پنجره جدید با کلیک روی لینک (تگ a) در Asp
- افزودن مقادیر به صورت دستی به List دریافت شده از ریپازیتوری
- حذف کامل یک رکورد در جدول ریلیشن شده
- مقایسه ساختار دو دیتابیس در 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