دسته بندی ها
19:38 1398/07/30

دلیل خطای unable to update the entityset becaseit has e definingquery and no<insertfunction> element exists

مشخصات سوال کننده :
کاربر : ghazale     امتیاز کاربر : 2     رتبه کاربر : 144
دسته بندی : سی شارپ

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3458
پاسخ دهنده : Sowgandi 23:24 1398/07/26

با سلام. دوست عزیز خوب می شد کدهایی که نوشتید رو قرار می دادید تا بهتر بشه نظر داد یا حداقل متن خطا رو میذاشتید. ولی به هر حال این مشکلی که شما میگید دلایل متفاوتی میتونه داشته باشه. حالا چند موردش رو میگم امیدوارم مشکل برطرف بشه. احتمالا جوری که من متوجه شدم دارید از مدل در پروژه تون استفاده میکنید. و چون خطا در قسمت SaveChange هستش پس مربوط به دیتابیس و داده ها میشه. اول یکبار تمام تیبل ها و ویوهای داخل مدل رو حذف کنید و دوباره اضافه کنید اگر مشکل برطرف نشد روش های زیر رو هم تست کنید.

1- اگر ID تیبل شما از نوع Identity نیست مطمئن بشید که داخل پروژه دارید این آی دی رو به صورت غیر تکراری پاس میدید. یا برعکس اگر از نوع Identity هست مطمئن بشید که داخل پروژه دیگه مقدار دهی نشه.

2- به Allow Nulls فیلدها در دیتابیس دقت کنید اگر این تیک نخورده باشد باید حتما در مدل هم مقداردهی بشه و مقدار به دیتابیس ارسال بشه.

3 - به Data Type ستون ها در دیتابیس دقت کنید. مثلا اگر یه فیلد رو از نوع varchar(50 قرار دادید در پروژه نباید تعداد کاراکترهای ارسالی بیشتر از 50 باشد. میتوانید این خاصیت رو در MaxLength تکست باکس کنترل کنید.

4 - موارد دیگه ای هم میتونه باشه که العان حضور ذهن ندارم ولی این سه مورد مهمترین اونها هستند. 

به این پاسخ امتیاز بدهید    4
امتیاز: 871 رتبه: 3
پاسخ دهنده : fateme 23:24 1398/07/26

اطلاعاتی که شما دادید تقریبا هیچ کمکی نمیشه کرد. لطفا سوال رو ویرایش کنید و کدهاتون رو قرار بدید

به این پاسخ امتیاز بدهید    0
امتیاز: 1617 رتبه: 2
پاسخ دهنده : Sowgandi 23:24 1398/07/26

سلام. دوست عزیز به نظر میرسه شما insert رو روی ویو زدید. ویوها حالت Insert ندارند. 

به این پاسخ امتیاز بدهید    1
امتیاز: 871 رتبه: 3
پاسخ دهنده : ghazale 23:24 1398/07/26

بله روی ویو زدم ولی حالت insert نداره یعنی چی باید چیکار کنم؟

به این پاسخ امتیاز بدهید    0
امتیاز: 2 رتبه: 144
پاسخ دهنده : saedbfd 23:24 1398/07/26

با سلام

دوست گرامي براي اينکه ساير برنامه نويسان بتونن به سوالات شما پاسخ صحيح و روشني بدن شما بايد سوال خودتون رو کامل توضيح بديد.

شما بايستي کدهايي که توي پروژه استفاده کرديد رو قرار بديد

از خطاهاي خودتون يا عکس قرار بديد يا متن خطا رو قرار بديد

توضيحات شما تقريبا ناقص هست و تمامي پاسخ هايي که سايرين ميدن همه با اما و اگر هست و نميشه پاسخ دقيقي به سوال شما داد. ضمنا از ارسال سوال تکراري پرهيز کنيد و در صورت نياز سوال رو ويرايش کنيد

موفق باشيد

به این پاسخ امتیاز بدهید    2
امتیاز: 1654 رتبه: 1
پاسخ دهنده : Sowgandi 23:24 1398/07/26

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

به این پاسخ امتیاز بدهید    2
امتیاز: 871 رتبه: 3
پاسخ دهنده : ghazale 10:58 1398/08/02

System.Data.Entity.Validation.DbEntityValidationException: 'Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.'

 

اطلاعات دارم از طريق فرم وارد جدولم ميکنم ولي اصلا سيو نميشه 

اينم کد هاي دستورم


 

userlogin userlog = new userlogin();
            userlog.computername = computername;
            userlog.ipaddress = ip;
            userlog.userid = publicClass.gusername;
            userlog.enterdate =String.Format("{0:yyyy:mm:dd}", Convert.ToDateTime(chalender.Text) + "-" + DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second );
            detabase.userlogins.Add(userlog);
            detabase.SaveChanges();
به این پاسخ امتیاز بدهید    0
امتیاز: 2 رتبه: 144
پاسخ دهنده : hamid_b 12:56 1398/08/02

سلام

همونطوری که در بخشی از متن خطای شما نوشته  "See 'EntityValidationErrors' property for more details"

وقتی خطا به شما میده یک گزینه ای توی صفحه خطا وجود داره به نام View Details که شما باید روش کلیک کنید و داخل فرمی که باز میشه گزینه inner Exception رو ببینید تا دلیل خطا مشخص باشه.

ولی طبق گفته خطا شما وقتی دارید مقادیر کلاس userLogin رو مقداردهی می کنید یکی از فیلدها رو دارید اشتباه مقداردهی می کنید. که من احتمال میدم کد زیر باشه

userlog.enterdate =String.Format("{0:yyyy:mm:dd}", Convert.ToDateTime(chalender.Text) + "-" + DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second );

دقت کنید که فیلد enterdate رو شما دارید احتمالا اشتباه مقداردهی می کنید. فکر میکنم به جای chalender.Text باید chalender.Value.year و ... باشه.

به این پاسخ امتیاز بدهید    0
امتیاز: 510 رتبه: 4
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود