PDA

View Full Version : سوال: نحوه استفاده Async در IRepository و Repository



Iran58
پنج شنبه 14 تیر 1397, 14:56 عصر
سلامکلاسهای زیر را داریم


public interface ICustomerRepository
{
List<Customers> GetAllCustomers();
IEnumerable<Customers> GetCusstomersByFilter(string parameter);
List<ListCustomerViewModel> GetNameCustomers(string filter = "");
Customers GetCustomerById(int customerId);
bool InsertCustomer(Customers customer);
bool UpdateCustomer(Customers customer);
bool DeleteCustomer(Customers customer);
bool DeleteCustomer(int customerId);
int GetCustomerIdByName(string name);
string GetCustomerNameById(int customerId);
}

و


public class CustomerRepository : ICustomerRepository
{
private Accounting_DBEntities db;


public CustomerRepository(Accounting_DBEntities context)
{
db = context;
}


public List<Customers> GetAllCustomers()
{
return db.Customers.ToList();
}


public IEnumerable<Customers> GetCusstomersByFilter(string parameter)
{
return db.Customers.Where(c =>
c.FullName.Contains(parameter) || c.Email.Contains(parameter) || c.Mobile.Contains(parameter)).ToList();
}


public List<ListCustomerViewModel> GetNameCustomers(string filter = "")
{
if (filter == "")
{
return db.Customers.Select(c => new ListCustomerViewModel()
{
CustomerID = c.CustomerID,
FullName = c.FullName
}).ToList();
}


return db.Customers.Where(c => c.FullName.Contains(filter)).Select(c => new ListCustomerViewModel()
{
CustomerID = c.CustomerID,
FullName = c.FullName
}).ToList();
}


public Customers GetCustomerById(int customerId)
{
return db.Customers.Find(customerId);
}


public bool InsertCustomer(Customers customer)
{
try
{
db.Customers.Add(customer);
return true;
}
catch
{
return false;
}
}


public bool UpdateCustomer(Customers customer)
{
// try
// {
var local = db.Set<Customers>()
.Local
.FirstOrDefault(f => f.CustomerID == customer.CustomerID);
if (local != null)
{
db.Entry(local).State = EntityState.Detached;
}
db.Entry(customer).State = EntityState.Modified;
return true;
// }
// catch
// {
// return false;
// }
}


public bool DeleteCustomer(Customers customer)
{
try
{
db.Entry(customer).State = EntityState.Deleted;
return true;
}
catch
{
return false;
}
}


public bool DeleteCustomer(int customerId)
{
try
{
var customer = GetCustomerById(customerId);
DeleteCustomer(customer);
return true;
}
catch
{
return false;
}
}


public int GetCustomerIdByName(string name)
{
return db.Customers.First(c => c.FullName == name).CustomerID;
}


public string GetCustomerNameById(int customerId)
{
return db.Customers.Find(customerId).FullName;
}
}


چگون می توان تبدیل به Async کنم
باتشکر

ژیار رحیمی
پنج شنبه 14 تیر 1397, 17:37 عصر
سلام
این نحوه پیاده سازی لازمه کدنویسی برای تمام مدل های موجود هست بهتره از جنریک تایپ ها استفاده کنی که کد نویسی کمتر داشته باشی.نمونه مثال های زیر را مطالعه کنید که بصورت Generic Repositroy و بصورت Async پیاده سازی شده

https://www.itworld.com/article/2700950/development/a-generic-repository-for--net-entity-framework-6-with-async-operations.html
https://cpratt.co/truly-generic-repository/
https://github.com/bhamer/async-repository

jafarpalideh
شنبه 16 تیر 1397, 08:56 صبح
یه سر هم به لینک زیر بزنید . آموزش فارسی :چشمک:

https://toplearn.com/courses/48/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87

arman293
پنج شنبه 08 آبان 1399, 11:30 صبح
سلام و درود وقت بخیر منم با این مشکل مواجه شدم متاسفانه هر چی تلاش کردم جواب نداد و اصلا کد ها به
Async تبدیل نمی شدن خیلی بالا پایین کردم تا اینکه واقعا کلافه ام کرده بود ولی یکی از آشنا ها یک ویدئو بهم معرفی کرد که کارم راه انداخت خدا خیرشون بده، حالا لینکش می گذارم شما هم استفاده کن اگه مشکلت حل شد برام اینجا بنویس.
https://darsman.com/courses/advanced-csharp-training (https://darsman.com/courses/advanced-csharp-training/)