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

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

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

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3507
هوش مصنوعی

پاسخ هوش مصنوعی

این خطا زمانی رخ می دهد که شما سعی دارید داده هایی را در یک مجموعه موجودیتی (EntitySet) که به صورت صحیح پیکربندی نشده است، به روز رسانی یا اضافه کنید. به عبارت دیگر، Entity Framework نمی تواند عملیات درج (Insert) را در این مجموعه ای که تعریف شده، به درستی انجام دهد.

به طور خاص، این خطا به این دلیل است که:

  • شما مجموعه ای به نام "userlogin" دارید که یک "تعریف پرسش" (Defining Query) برای آن وجود دارد. این معمولاً به دلیل این است که Entity Framework نمی تواند تشخیص دهد این مجموعه چه نوع عملیاتی را باید بر روی آن انجام دهد.
  • هیچ عنصر `` برای این موجودیت تعریف نشده است. بنابراین، Entity Framework نمی داند چگونه باید داده های جدید را به این جدول اضافه کند.

برای حل این مشکل، می توانید مراحل زیر را طی کنید:

  1. مطمین شوید که جدول "userlogin" در پایگاه داده به درستی ایجاد شده است و دارای کلید اولیه است.
  2. اگر از Database First استفاده می کنید، اطمینان حاصل کنید که مدل شما به روز است و هیچ خلاصه ای از Entity Framework وجود ندارد.
  3. اگر از Code First استفاده می کنید، اطمینان حاصل کنید که موجودیت شما به درستی پیکربندی شده و دارای `DbSet` در کلاس `DbContext` شما می باشد.
  4. با استفاده از Migrations، پایگاه داده خود را بروزرسانی کنید.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

با سلام

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

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

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

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

موفق باشيد

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

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

به این پاسخ امتیاز بدهید    2
امتیاز: 876 رتبه: 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 رتبه: 145
پاسخ دهنده : 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
امتیاز: 518 رتبه: 4
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود