PDA

View Full Version : سوال: خطا بخاطر استفاده از اتربیوت [NotMapped]



پروگرامنویس
چهارشنبه 12 اردیبهشت 1397, 12:33 عصر
درود من تو انتیتی جدولی از یک پروپرتی با اتربیوت [NotMaped] و [request] برای کد امنیتی استفاده کردم که نمیخوام بعنوان فیلد تو جدول ذخیره بشه ،اما هنگام عملیاتهایی مثه Update کردن یک یا چند فیلد ازین جدول یک خطا از همین پروپرتی واسم رخ میده و تا وقتی بصورت دستی تو همون اکشن update این پروپرتی رو مقداردهی نکنم اکشن کار نمیکنه.بنظرم این مقداردهی دستی راه حل استاندارد و منطقی نیست! لطفا اگه میدونید راه حل درست این خطا رو بهم بگید
سپاس

البته اینم بگم یه راه دیگه هم امتحان کردم و اونم استفاده از ویومدل که این پروپرتی رو اونجا پیاده سازی کردم واسه اکشن ادیت کارم رو راه انداخت اما برای اکشن ادد دوباره بهم گیر داد!

RIG000
چهارشنبه 12 اردیبهشت 1397, 17:59 عصر
1- لطفا متن خطا رو بزارید
2- به پراپرتی مد نظر virtual رو اضافه کنید ببینید هنوظ خطا میده یا نه
3- و یا اینکه پراپپرتی موزد نظر رو null able معرفی کنید

پروگرامنویس
پنج شنبه 13 اردیبهشت 1397, 14:42 عصر
1- لطفا متن خطا رو بزارید
2- به پراپرتی مد نظر virtual رو اضافه کنید ببینید هنوظ خطا میده یا نه
3- و یا اینکه پراپپرتی موزد نظر رو null able معرفی کنید

2-ویرچوال اضافه کردم تاثیری نداشت، 3-پروپرتی چون رشته ای هست نال ایبل که میدم خطا میگیره.

ببینید من تو دو جا ازین نوع پروپرتی ها که نمیخوام تو جداول ذخیره بشه استفاده کردم،یکی تو جدول دیدگاه ها بعنوان کد امنیتی یکی تو جدول کاربران برای دوباره نوشتن رایانامه یا گذرواژه هنگام ثبت نام!
تو مورد اول (جدول دیدگاه ها)زمانی که میخوام مقدارهای اولیه بدم به دیتابیس تو همون متد سید ازم ارور می گیره و تا بصورت دستی به این فیلد یه مقدار الکی ندم خطا برطرف نمیشه


// کد امنیتی
[NotMapped]
[Required(ErrorMessage = "کد امنیتی را وارد کنید!")]
[Display(Name = "کد امنیتی")]
[DisplayName("کد امنیتی")]
public string Capcha { get; set; }
//++++

تصویر خطا:
148101
تو جدول کاربران هم موقعی که مثلا میخوام جدیدی رو اضافه کنم اونجام همین خطا رو میده

Mahmoud.Afrad
پنج شنبه 13 اردیبهشت 1397, 17:53 عصر
به نظر من نبایست کپچا را در مدل انتیتی قرار بدید چون هیچ ربطی به موجودیتی که قرار هست ذخیره بشه ندارد بلکه مربوط به منطق برنامه هست. همون ویومدل منطقی تر هست.

RIG000
پنج شنبه 13 اردیبهشت 1397, 18:32 عصر
بیین اگر تو یه کلاس داری که ویو مدل هست و یک کلاس داری که به دیتابیس وصل هست. بین این دو به طور مثال .StudentVM.cs و student.cs رو داری و بین این دو یک Mapping اتفاق می افته . اگر کپتچا جزیی از فیلد های ذخیره سازی شما نیست پس نیازی نیست در student.cs باشه پس شما اون رو فقط در studentVM.cs میزاری و در هنگام ذخیره سازی این mapping‌میگه شما باید ویو مدل رو در دامین اصلی که همون student.cs هست بریزی پس نیازی نداری در student.cs داشته باشیش و این نشون میده که شما Validation‌رو بر روی کپتچا رو در studentVM انجام دادید . در همه پروژه های بزرگ به همین شکل هست و اگر dto شندیدی معمولا بین در wep api استفاده میشه. البته کاربرد های دیگه هم داره که من mapping رو منظورم بود. در نهایت یادت باشه مدل های صفحه رو به دامین های اصلی وصل نکنی و همیشه بین اون ها یک مپ داشته باشی. این نمونه رو ببین و متوجه نحوه انجامش میشی. https://www.codeproject.com/Articles/1043977/Mapping-ViewModel-to-Model-in-ASP-NET-MVC-using-Im