دسته بندی ها
10:44 1401/04/13

ذخیره اطلاعات به صورت چندمرحله ای در دیتابیس در Asp.net core

مشخصات سوال کننده :
کاربر : baghi     امتیاز کاربر : 5     رتبه کاربر : 110
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 4401
4 نظر
saedbfd : شما دقیقا چه کدی برای کارتون نوشتید ؟ این کدی که نوشتید که دستورات انتیتی فریم ورک هست برای ذخیره اطلاعات در دیتابیس به صورت خیلی ساده

امتیاز کاربر : 1654   رتبه کاربر : 1   تاریخ ثبت : 12:57 1401/04/13
baghi : نمی دونم درست متوجه منظورتون شده باشم یا نه، اما جدول رو با asp ساختم یعنی توو پوشه مدل کلاسشو نوشتم و بعد کلاس ApplicationDbContext و همینطور صفحه ورود اطلاعات - اما برای یه همچین حالتی که در سوال عرض کردم نمی دونم چه کدی بنویسم.

امتیاز کاربر : 5   رتبه کاربر : 110   تاریخ ثبت : 01:53 1401/04/13
baghi : بفرمایید این روش از نظر فنی مشکلی داره؟ : ابتدا خاصیت NotNull رو از فیلد ها بردارم و بعد بر روی input هایی که در صفحه view دارم، شرطمو بذارم.

امتیاز کاربر : 5   رتبه کاربر : 110   تاریخ ثبت : 02:04 1401/04/13
saedbfd : از لحاظ فنی مشکلی نیست. بستگی داره چیکار میخاید کنید. اگر دقیق منظورتون رو بگید راهنماییتون میکنم.

امتیاز کاربر : 1654   رتبه کاربر : 1   تاریخ ثبت : 03:05 1401/04/13
ادامه نظرات ...
پاسخ دهنده : fateme 17:13 1401/04/13

نحوه Insert اطلاعات در دیتابیس توسط دستورات Entity Framework

همونطوری که دوستان دیگه هم گفتن منظور شما واضح مشخص نشده. بنده روشهای مختلف ثبت اطلاعات در دیتابیس توسط دستورات انتیتی فریم ورک رو میگم تا هر کدوم که به کار شما نزدیک بود استفاده کنید.

 

ثبت یک رکورد در دیتابیس توسط  انتیتی فریم ورک

اولین حالت اینه که شما قصد دارید یک رکورد رو در دیتابیس توسط دستورات انتیتی فریم ورک ذخیره کنید. برای این منظور از کد زیر استفاده کنید :

public IActionResult SaveInDB(Users model)
{
   If (ModelState.IsValid)
   {
      _context.Users.Add(model);
      _context.savechanges();
      return View();
   }
   return View(model);
}

در این حالت model از سمت View به کنترلر ارسال میشه و اگر model از لحاظ اعتبارسنجی مشکلی نداشت در دیتابیس ثبت میشه.

 

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

اگر قصد دارید به صورت گروهی اطلاعات رو در دیتابیس ذخیره کنید می تونید از یک حلقه for استفاده کنید :

public IActionResult SaveInDB(IEnumerable<Users> model)
{
   for (int i = 0, i < model.count(); i++)
   {
      _context.Users.Add(model[i]);
   }
   _context.savechanges();
   return View();
}

 

ثبت حجم زیادی از اطلاعات به صورت همزمان در دیتابیس توسط انتیتی فریم ورک

اگر حجم اطلاعاتی که دارید خیلی زیاد هست میتونید از Bulk Insert استفاده کنید.

درج اطلاعات با SQL Bulk Insert در Entity Framework

ویرایش شده در دوشنبه 13 تیر 1401 ساعت 18:44:26
به این پاسخ امتیاز بدهید    2
امتیاز: 1617 رتبه: 2
پاسخ دهنده : Sowgandi 18:20 1401/04/13

سلام دوست عزیز، من فکر کنم منظور شما رو متوجه شدم. شما یک فرم با ورودی های زیادی دارید و نمیخواهید تمام ذخیره فرم رو در ابتدا و با یک دکمه انجام بدید. و قصد دارید عمل ذخیره سازی رو در چند پارت انجام بدید. اگه منظورتون همین هست من یک روش رو بهتون پیشنهاد میکنم.

اگر دقت کنید در بسیاری از سایت ها وقتی ثبت نام می کنید در ابتدا همه اطلاعات شما پرسیده نمی شه و فقط اطلاعات اصلی و اجباری مثل ایمیل، نام کاربری و ... از شما پرسیده میشه و بعد از اینکه شما ثبت نام تون کامل شد، یه قسمتی رو در اختیار شما قرار میده که برید و پروفایل خودتون رو تکمیل کنید. مثل عکس، تلفن، آدرس و ... خب همه این اطلاعات در یک تیبل ذخیره میشه ولی در دو یا چند قسمت شما این اطلاعات رو تکمیل می کنید.

من توصیه می کنم که شما هم همین کار رو انجام بدید، ابتدا در اولین بارکه فرم ثبت اطلاعات باز میشه فیلدهای اجباری رو نمایش بدید و مابقی فیلدها رو مخفی (hidden) کنید. وقتی کاربر فیلدهای اصلی رو پر کرد و دکمه ذخیره رو زد این اطلاعات رو در دیتابیس ذخیره کنید و پارت بعد فیلدهارو که میخواهید پر کنه رو به حالت visible تبدیل کنید. و بعد مجدد برید سراغ پارت بعدی. به همین ترتیب عمل ذخیره سازی شما در چند پارت صورت میگیره و فرم شما هم حالت زیباتر و حرفه ای تری به خودش میگیره. البته میتونید این کار رو نکنید و طبق توضیح خودتون برای هر قسمت از فیلدها دکمه جداگانه بذارید که این کار حرفه ای نیست.

به این پاسخ امتیاز بدهید    0
امتیاز: 871 رتبه: 3
پاسخ دهنده : saedbfd 18:51 1401/04/13

اگر قراره که اطلاعات جدول شما حتما وارد بشه (مثلا اطلاعات پایه و اطلاعات تحصیلی و ... ) بنابراین بذارید حالت NotNull بمونه. (البته برای فیلدهای رشته ای زیاد ضروری نیست این گزینه)

به نظرم چون همه اطلاعات شما قراره در یک جدول ذخیره بشه پس بنابراین View شما هم یک model داره. وقتی روی دکمه ثبت اطلاعات کلیک میشه کل model رو ارسال کنید به سمت کنترلر و همه اطلاعات رو یکجا ثبت کنید. (حالت مرحله مرحله نباشه اصلا)

به این پاسخ امتیاز بدهید    0
امتیاز: 1654 رتبه: 1
پاسخ دهنده : baghi 23:43 1401/04/13

این نمونه از فرم بنده است

البته در فرم اصلی تعداد ورودی ها و دسته بندی ها بیشتره

مقداردهی به فیلدهای دیتابیس

پایین هر بخش یه دکمه ذخیره دارم که کاربر بتونه اطلاعاتشو ذخیره کنه

به اینصورت که اطلاعات هر دسته میره توو فیلد های مربوط به خودش قرار میگیره

 و تمامی این اطلاعات در یک رکورد ثبت میشن

دکمه آخری هم یک فیلد توو جدوله که حالت TRUE - FALSE  داره

که اگه مقدارش TRUE باشه، اطلاعات ثبت شده این کاربر رو به کارشناس مربوطه نشون میده

" این فرم رو میشه در حالت آکاردیونی یا گذاشتن در تب های مختلف اجرا کرد " - اما چالشی که دارم نحوه ورود اولیه و همچنین ذخیره هر بخش در همون رکورد هست.

همین.

از وقتی که اساتید محترم گذاشتن، ممنونم.

اگه خودم هم به نتیجه رسیدم که نتیجه کار رو از همین تریبون اعلام می کنم ( دی )

ویرایش شده در سه شنبه 14 تیر 1401 ساعت 01:07:32
به این پاسخ امتیاز بدهید    1
امتیاز: 5 رتبه: 110
1 نظر
saedbfd : شما باید توی دکمه ذخیره اول عملیات Insert و در دکمه های بعدی عملیات ویرایش انجام بدید. قابلیت null هم باید داشته باشن. البته روشهای دیگه ای هم هست ولی توضیح بدم فکر نکنم متوجه بشید. (از طریق جی کوئری)

امتیاز کاربر : 1654   رتبه کاربر : 1   تاریخ ثبت : 01:04 1401/04/14
پاسخ دهنده : baghi 11:27 1401/04/14

بله حق با شماست، اما در این حالت مشخص نمیشه که کاربر ابتدا کدوم قسمت رو پر می کنه، که رکورد ایجاد بشه

برای همین، می خوام قبل از ورود به این صفحه با استفاده از Modal یه اطلاعاتی ریز از کاربر بگیرم که بتونم رکورد رو ایجاد کنم

اینطوری دیگه دغدغه اینکه اول کدوم قسمت پر بشه رو ندارم

" اگر روش دیگه ای مد نظر هست، ممنون میشم راهنمایی بفرمایید "

 

در مورد جی کوئری هم ممنونم ازتون - این روش رو هم پیگیری می کنم

به این پاسخ امتیاز بدهید    0
امتیاز: 5 رتبه: 110
پاسخ دهنده : mmr1401 14:12 1401/04/14

با سلام

خب در هنگام باز شدن پنجره فقط بخش اول رو فعال کن و بقیه بخش ها غیر فعال باشن تا هنگامی که کاربر بخش اول رو پر کرده باشه و تکمه ثبت رو بزنه. بعد بخش دوم فعال بشه و همینطور تا مرحله آخر. اینطوری هم مطمئن میشی در اولین ورود اطلاعات بخش اول وارد میشه و اینجا میتونی insert داشته باشی و برای سایر بخش ها update جدول و داشته باشی.

البته اگر اکثر فیلدها  not null  باشن در insert مشکل میخوری، که به نظرم میتونی با مقادیر پیش فرض پر کنی و بعد در هنگام update مقادیر واقعی و درست و وارد جدول کنی

ویرایش شده در سه شنبه 14 تیر 1401 ساعت 14:15:31
به این پاسخ امتیاز بدهید    1
امتیاز: 45 رتبه: 19
پاسخ دهنده : baghi 15:51 1401/04/14

دوست عزیز، اومدم با نمایش Modal رکورد رو ایجاد کردم، از این به بعد تمامی دکمه ها کارشون Update شد.

اما در رابطه با مقادیر پیشفرض، توو این حالت وقتی کاربر میره به صفحه ورود اطلاعات، به خاطر اینکه از تگ asp-for استفاده شده

مقادیر پیشفرض در فیلد ها قرار گرفتن!

اساتید راهنمایی لطفا..

به این پاسخ امتیاز بدهید    0
امتیاز: 5 رتبه: 110
2 نظر
saedbfd : دوست عزیز دوستان مختلف نظرشون رو گفتن. شما باید یک تصمیم برای کارت بگیری. به نظرم بهترین روش اینه که شما در صفحه اول اطلاعات پایه رو از کاربر دریافت کنی و کاربر روی دکمه ادامه کلیک کنه. در صفحه دوم اطلاعات تحصیلی و ادامه. صفحه سوم و الی آخر. الان تو اکثر سایتها هم که ثبت نام های طولانی دارن دقیقا همین روش استفاده میشه. برای این کار میتونید از قالب Frest استفاده کنید که امکانات خوبی برای کارهای مرحله ای داره.

امتیاز کاربر : 1654   رتبه کاربر : 1   تاریخ ثبت : 04:03 1401/04/14
baghi : بدلیل محدودیت در ارسال پاسخ؛ در پست اول، اقداماتی که کردم رو نوشتم. خیلی ممنون.

امتیاز کاربر : 5   رتبه کاربر : 110   تاریخ ثبت : 05:57 1401/04/14
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود