PDA

View Full Version : گرفتن لیست مخاطبین از یک متد در Entity framework



negar.rafie
چهارشنبه 13 دی 1396, 10:09 صبح
سلام
من یک متد ایجاد کردم حالا میخوام داخل اون متد کوئری بزنم و برگشت بدم
یکی از روش ها به صورت زیر است

private List<Person> LoadPerson()
{
dbPerson dbp =new dbPerson();
return dbp.tblPerson.Tolist();
}

حالا میخواستم بدونم به از این روش روش دیگه ای هست؟
یعنی نخوام نوع لیست را اسم جدول انتخاب کنیم؟ منظورم این است List<Person>
ممنون

parvizwpf
چهارشنبه 13 دی 1396, 11:24 صبح
بصورت جنریک فکر کنم منظورتون هست؟

ali_md110
چهارشنبه 13 دی 1396, 12:46 عصر
سوالتون واضح نیست!!

بجای نام مدل یک ویو مدل قرار بدید

negar.rafie
چهارشنبه 13 دی 1396, 16:14 عصر
ببینید میخوام مخاطبین یک جدول را ارسال کنم به فرم در گرید
فکر کنم همون لیست جنریک باید استفاده کنم
ممنون میشم راهنمایی کنید

ali_md110
چهارشنبه 13 دی 1396, 19:52 عصر
لیستی که در پست اول ساختید یک لیست جنریک از نوع کلاس Person هست و نیاز شما را برطرف میکند

شما باید یک کلاس ریپوزیتوری بسازید Generic Repository
کلاس های Rep جنریک رو من پیشنهاد نمیدم به دلیل اینکه اگر پروژه بسط یافت و بزرگ شد کارایی خودش از ذست میده اونم برای کوئریهای پیچیده و متدهای با پارامترها متفاوت

ولی ساختنش روشهای مختلف داره
مثلا اینکه که ابتدا یک Interface میسازیم با یک سری متد و یک کلاس پیاده سازی کننده که میتونه یک کلاس abstract هم باشه


interface IService<T>
{
List<T> GetList();
}


public class GenericService<T, TC> :
IService<T> where T : class where TC : DbContext, new()
{
public TC Context { get; set; } = new TC();
public List<T> GetList()
{
IQueryable<T> query = Context.Set<T>();
return query.ToList();
}
}


کافیه این اینترفیس رو وهله سازی کنیم از نوع کلاسGenericService
هم میتونید دستی اینکار بکنید و هم تحول ioc کانتینرهای مورد دلخواه خودتون مثل Unity یا Structuremapو غیره

بصورت دستی وهله سازی میکنم:

یک کلاس یا فرم دارم :


public class Test
{
private IService<ApplicationUser> _user;

public void GetList()
{
_user = new GenericService<ApplicationUser, ApplicationDbContext>();
_user.GetList();

}
}


این یک مثال ساده بود
ولی توی این لینک میتونید بهتر یاد بگیرید

https://cpratt.co/truly-generic-repository/