PDA

View Full Version : ارسال داده به جند جدول مرتبط و خطای اعتبارسنجی



leilast
سه شنبه 21 آذر 1396, 22:46 عصر
سلام. من یه فرم تعریف کردم با چندتا جدول. یه فرم تعریف کردم که از هر جدول چندتا فیلدش رو گذاشتم توش. حالا وقتی میام فرم رو سایمبت کنم مرتب به من خطای validation میده. و معلوم هم نیست مال چه فیلدیه. فیلدهایی هم که در فرم نیاوردم همشون nullable هستند. به نظرتون اشکال از چیه؟ راهی هست که کلا validation رو غیر فعال کنم ببینم چی میشه؟

این ویو مدلم هست:

public class CreateUsersViewModel
{
public EmployeePosition EmployeePositions { get; set; }
public Employee Employees { get; set; }
public UsersInfo UserInfos { get; set; }

}





این هم کنترلر. فیلدهای مشترک رو اینجا تعریف کردم. empid فیلد مشترک تو سه تا جدول هست

public ActionResult CreateUsers()
{

return View();
}
[HttpPost]

public ActionResult CreateUsers(CreateUsersViewModel model)
{


var Emplployee = new Employee
{
EmpID = model.Employees.EmpID


};
var UserInfo = new UsersInfo
{
Usr_EmpID = model.Employees.EmpID
};
var EmployeePosition = new EmployeePosition
{
EmpID = model.Employees.EmpID
};
using (var db = new ParsDataEntities())
{
db.Employees.Add(Emplployee);
UserInfo.Usr_EmpID = Emplployee.EmpID;
db.UsersInfos.Add(UserInfo);
EmployeePosition.EmpID = Emplployee.EmpID;
db.EmployeePositions.Add(EmployeePosition);
db.SaveChanges();
return MessageBox.Show("با موفقیت ثبت شد", MessageType.Success);
}




}






میشه راهنماییم کنید؟خیلی وقتم رو گرفته تا الان

mr.sirwan
سه شنبه 21 آذر 1396, 23:11 عصر
سلام
اول از همه شرط ModelState.IsValid رو قبل از ثبت اطلاعات چک کنید
دوما، شما چرا دوبار واسه ابجکت های UserInfo و EmployeePosition فیلد EmpID رو مقدار دهی کردین؟! مگه فیلدتون قراره بعد از ثبت توی دیتابیس تغییر کنه؟
سوما اینجوری نمیشه نظر داد، مدل هاتون رو اینجا قرار بدین که بررسی بشه

leilast
پنج شنبه 23 آذر 1396, 10:56 صبح
سلام
ممنون از توجهتون
Modelstate رو گذاشتم. خطای اعتبارسنجی نداره دیگه
دلیل اینکه دو بار تعریف کردم اینه که اسم این فیلد توی جدول دیگه فرق میکنه. در جدول اول empid کلید اصلی و autoincrement هست. پس مقدارش در فرم توسط کاربر ثبت نمیشه. در جدول userinfo مقدار EmpId=Usr_empId هست اما چوا اسمش متفاوت هست دوباره آوردمش.
عکس مدلم رو گذاشتم . توی مدل کلیدهای empid که در employee کلید اصلی و در دوتای دیگه کلید خارجی هست رو گذاشتم.



توضیح: جدول employee همه مقادیر بجز EmpId که کلید اصلی هست بقیه allow null هستند.
جدول UserInfo فیلدهای Usr_UserNameوUsr_PasswordوUsr_EmpIDوUsr_Activat ion باید مقداردهی بشن و null نمیپذیرند.
جدول EmployeePosition هم فقط فیلدEmpID_Creator ،نال میگیره.

ali_md110
پنج شنبه 23 آذر 1396, 17:24 عصر
این 3 ویومدل در متد httpget وهله سازی نکردید


public EmployeePosition EmployeePositions { get; set; }
public Employee Employees { get; set; }
public UsersInfo UserInfos { get; set; }



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


public ActionResult CreateUsers()
{
var m= new{اینجا وهله سازی سه ویومدل انجام بدید}

return View(m);

}



در متد httppost یک برکپوینت ابتدای کد بزارید و ولیدیشن رو چک کنید

leilast
پنج شنبه 23 آذر 1396, 17:27 عصر
پست قبلی رو ویرایش کردم چون خطای اعتبارسنجی از بین رفت و دیگه نیازی به ویو نیست (ویو رو هم گذاشته بودم پاک کردم).
الان در کنترلر خطا به قسمت savechange میگیره.
درواقع فکر میکنم کویری مشکل داشته باشه.
حالا با توجه به مدل و کلیدها میشه کنترلر رو یه بررسی کنید ببینید کجاش مشکل داره؟
ممنون میشم

leilast
پنج شنبه 23 آذر 1396, 17:38 عصر
وهله سازی رو انجام دادم اما همون قسمت اول کنترلر قبل از actionresult ها گذاشتم که هر جا لازم داشتم ازش استفاده کنم.
validation رو هم درستش کردم و خطاش رو بردم.
بریکپوینت هم گذاشتم برای هر سطر از قسمت هایی که add داره دو سطر local و sql رو با علامت ضربدر قرمز مشخص کرده و یه سطر هم نوشته the function evaluation requires all threads to run

mr.sirwan
پنج شنبه 23 آذر 1396, 18:45 عصر
با سلام، الان مشکل شما برطرف شده یا خیر؟

leilast
پنج شنبه 23 آذر 1396, 22:16 عصر
با سلام، الان مشکل شما برطرف شده یا خیر؟
ببخشید مثل اینکه خیلی شلوغ شد واضح نگفتم.
خطای اعتبارسنجی داشت اولش ، اما اون خطا رو رفع کردم. اما الان توی اینزرت داده مشکل داره.یعنی داده های فرمم باید توی سه تا جدول اینرزت بشه که نمیشه!

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

ali_md110
پنج شنبه 23 آذر 1396, 23:08 عصر
شما برک پوینت بزارید ابتدای متد post قبل از متد addببینید داده های دریافتی نال هست یا خیر؟
اگر نال نبود مشکل به سمت دیتاکانتکست شماست
بهتره ازش عکسی بگیرید ارسال کنید

leilast
جمعه 24 آذر 1396, 09:14 صبح
عکس از خطاها

leilast
جمعه 24 آذر 1396, 18:28 عصر
مشکل حل شد . ممنون از همه