PDA

View Full Version : سوال: چند مشکل در MVC



dr.undead
دوشنبه 22 شهریور 1395, 23:31 عصر
سلام
دو تا سوال یا مشکل برام پیش اومده که ممنون میشم ازین مشکلات رهایی بخشید منو :دی

1- یک Controller رو از روی Model ساختم و View اونو هم ساختم
حالا تصور کنید من چندتا فیلد (ستون) به model اضافه کردم . حالا چجوری باید Controller و View رو Update کنم ؟ از نو باید بسازم ؟

2-داشتم برای تست هم که شده ، یه روشیو امتحان می کردم ، اونم اینه که اول دیتابیسو ساختم و بعد model رو با Data > entityframework ساختم و وصلش کردم به دیتابیس .
و حالا دو تا مشکل در اینجا باز برام پیش اومد :
2-1: میومدم دیتارو از ویو وارد کنم یک ارور میداد و نمیزاشت دیتا در دیتابیس بشینه . این ارور
Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

در صورتی که validation برای فیلدا گذاشتم . اما نفهمیدم و رفتم سراغ روش "1"

2-2: میخواستم تیبل دیتابیسمو از توی SQL تغییر بدم و تایپ بعضی از ستونارو عوض کنم ، اما نمیزاشت و ارور میداد ! تا حالا کسی به این مشکل برخورده ؟

آیا مشکلات "2" مربوط به permisson های سیستم میشه ؟

3- اسم روش دوم چیه ؟

متشـــــــــــــکر

Moien Tajik
دوشنبه 22 شهریور 1395, 23:50 عصر
سلام ,

1 : یا باید کدهای کنترلر و ویو رو خودتون دوباره بنویسید یا باید ویو ها و کنترلر رو پاک کنید و اون هارو از اول بسازید ، دقت کنید که migrations رو فعال کرده باشید .

2-1 : اگر منظرتون از entityframework در ساختن ، ADO.NET هستش ، احتمالا موقع ساخت column در دیتابیس ، برای اون شرطی قرار دادید مثلا nvarchar(10) و شما خواستید بیشتر از 10 کاراکتر وارد کنید که این ارور رو دریافت کردید . توضیحات بیشتر در این مورد : http://www.c-sharpcorner.com/UploadFile/97fc7a/validation-failed-for-one-or-more-entities-mvcentity-frame/

2-2 : میتونید با alter اطلاعات رو تغییر بدید یا از این آموزش ها استفاده کنید :
http://stackoverflow.com/a/11035353
http://stackoverflow.com/a/6810442
http://stackoverflow.com/a/18480609

3 : به این روش که مدل هارو شما از روی دیتابیس میسازید Database First گفته میشه .

dr.undead
سه شنبه 23 شهریور 1395, 10:02 صبح
تنها validation هایی که براش قرار دادم [Required] هستش .
اگه درست فهمیده باشم Code First راحت تره ؟ هم نسبت به تغییراتش و هم اینکه خودش دیتابیسو در sql میسازه .
Database first مزایایی هم داره نسبت به Code Frist ؟

یه چیز دیگه ، میگریشنو از console فعال کردم و فولدرشم اضافه شد به سولوشن
کار دیگه ای باید بکنم ؟ چون هنوز ارور دارم

ممنون

hakim22
سه شنبه 23 شهریور 1395, 11:16 صبح
متد SaveChange رو به این صورت تغییر بدید تا خطای Validation قابل مشاهده شود. در بسیاری از مواقع مشکل null بودن یکی از مقادیر اصلی یا کلیدهای خارجی است.


try
{
return base.SaveChanges();
}
catch (DbEntityValidationException ex)
{
var sb = new StringBuilder();


foreach (var failure in ex.EntityValidationErrors)
{
sb.AppendFormat("{0} failed validation\n", failure.Entry.Entity.GetType());
foreach (var error in failure.ValidationErrors)
{
sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
sb.AppendLine();
}
}


throw new DbEntityValidationException(
"Entity Validation Failed - errors follow:\n" +
sb.ToString(), ex
);
}

dr.undead
سه شنبه 23 شهریور 1395, 17:19 عصر
تنها validation هایی که براش قرار دادم [Required] هستش .
اگه درست فهمیده باشم Code First راحت تره ؟ هم نسبت به تغییراتش و هم اینکه خودش دیتابیسو در sql میسازه .
Database first مزایایی هم داره نسبت به Code Frist ؟

یه چیز دیگه ، میگریشنو از console فعال کردم و فولدرشم اضافه شد به سولوشن
کار دیگه ای باید بکنم ؟ چون هنوز ارور دارم

ممنون

دوستان لطف کنن اونکیارم جواب بدن :دی

در ضمن در فایل configuration.cs در migration اون خطی که false هست هم true کردم اما جواب نداد باز
نمیدونم چیکار کنم دیگه :::

Moien Tajik
چهارشنبه 24 شهریور 1395, 06:49 صبح
تنها validation هایی که براش قرار دادم [Required] هستش .
اگه درست فهمیده باشم Code First راحت تره ؟ هم نسبت به تغییراتش و هم اینکه خودش دیتابیسو در sql میسازه .
Database first مزایایی هم داره نسبت به Code Frist ؟

یه چیز دیگه ، میگریشنو از console فعال کردم و فولدرشم اضافه شد به سولوشن
کار دیگه ای باید بکنم ؟ چون هنوز ارور دارم

ممنون

نمیشه گفت راحتتر ، اما الان در بیشتر آموزش هایی که ساخته میشه از Code First استفاده میشه . بستگی به شما داره که با کدوم راحتتر باشید .

اگر Migrations هنوز مشکل داره ، پوشه Migrations رو حذف کنید و از این کد استفاده کنید :

در Global.Asax در Application_Start این کد رو قرار بدید و جای YourContext در کد ، Context خودتون رو قرار بدید :

Database.SetInitializer(new MigrateDatabaseToLatestVersion<YourContextContext, MigrationConfig>());


و بعد از Application_Start این کد رو اضافه کنید :

public class MigrationConfig : DbMigrationsConfiguration<YourContextContext>
{
public MigrationConfig()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}


protected override void Seed(YourContextContext context)
{
}
}