خواندن از دیتابیس بدون لود شدن Relation ها
سلام
توی پروژه ASP.Net Core 2.2 یه کوئری دارم به این شکل
var images = (from i in _context.Images where i.ImageUserId == userId select i).ToListAsync();
وقتی اجرا میشه images رو میاره به همراه تمام اطلاعات مربوط به جدول Users که با جدول Images ارتباط (Relation) داره . میخوام اطلاعات جدول Users رو بی خیال بشه . چی کار باید بکنم ؟
نقل قول: خواندن از دیتابیس بدون لود شدن Relation ها
نقل قول:
نوشته شده توسط
maxpayn2
سلام
توی پروژه ASP.Net Core 2.2 یه کوئری دارم به این شکل
var images = (from i in _context.Images where i.ImageUserId == userId select i).ToListAsync();
وقتی اجرا میشه images رو میاره به همراه تمام اطلاعات مربوط به جدول Users که با جدول Images ارتباط (Relation) داره . میخوام اطلاعات جدول Users رو بی خیال بشه . چی کار باید بکنم ؟
بخش select رو محدود کنید به ستون های دلخواه
نقل قول: خواندن از دیتابیس بدون لود شدن Relation ها
نقل قول:
نوشته شده توسط
shahab_ksh
بخش select رو محدود کنید به ستون های دلخواه
ممنون . راستش همین کار رو هم کردم ولی وقتی images رو میخوام return کنم میگه نمیتونم به نوع ImageDto که خودم تعریف کردم و همون پراپرتی هایی رو داره که select میکنم ، کانورت کنم چون ناشناخته هستش :متفکر:
نقل قول: خواندن از دیتابیس بدون لود شدن Relation ها
سلام، میتونید یه viewmodel بنویسید که فقط بخشهایی که میخواد رو واکشی کنه
نقل قول: خواندن از دیتابیس بدون لود شدن Relation ها
در کوئری گزینه
AsNoTracking رو اضافه کن مشکلت حل میشه
نقل قول: خواندن از دیتابیس بدون لود شدن Relation ها
با سلام.
برای این منظور روش صحیح این هست که برای واکشی اطلاعات به سرور زیاد فشار نیارید.
پیشنهاد می کنم که از ViewModel برای این منظور در پوشه ViewModel هاتون که در لایه ی YourProjectName.Core هست استفاده کنید.
در اینجا شما ViewModel با نام ImageViewModel در پوشه ViewModel هاتون ایجاد کنید.
فیلد هایی از آن Image را که می خواهید واکشی کنید مشخص کنید.
از طریق تعریف در سرویس مورد نظرتون مثلا اینجا IImageService (به عنوان مثال) متودی به صورت زیر عمل کنید:
در IImageService یا همون ریپوزیتوری، متودی برای دریافت ایمیل تعریف کنید:
ImageViewModel GetImageByUserId(int userId)
در ImageService داریم: (فرض رو بر این گذاشتم که شما دو تا پروپرتی ImageName و CreateDate را در ImageViewModel تعریف کردید.)
public ImageViewModel GetImageByUserId(int userId){
return _context.Images.where(i=> i.ImageUserId== userId).select(new ImageViewModel(){
ImageName=c.imageName,
CreateDate=i.createDate
}).ToList();
}