• 1403/02/16

استفاده از fluent API در حطای Conflict :

 

من سه تا مدل دارم 

Food

FoodCategory

FoodSelectedCategory 

 

برای اضافه کردن غذایی که توی دسته بندی خودش هست میخوام اد کتم به FoodSelectedCategory 

ولی خطای conflict میده میخوام با fluentAPi  حلاش کنم ولی یا باز خطا میده یا هر بار فقط foodId  رو ذخیره میکنه 

کجاش رو اشتباه نوشتم یه توضیخ میدید لطفا برای این فوینت که دقیقا ایندکس اینحا چی میشه ؟

این سه تا مدلم هست و رابطه هاشون 

کدی که سرچ کردم این بود ولی درست متوحه هش نشدم ممنون میشم بکید یه توضیخ بدید که اینحا هر کدوم چی قرار میگیره البته  مطمین نیستم درست باشه. بعد این همچنان خطای conflict رو دارم 

         modelBuilder.Entity<FoodSelectedCategory>(foodSelectedCategory =>
         {
             foodSelectedCategory
                 .HasOne(x => x.Food)
                 .WithMany(x => x.FoodSelectedCategories)
                 .HasForeignKey(x => x.FoodId);

             foodSelectedCategory
                 .HasOne(x => x.FoodCategory)
                 .WithMany(x => x.FoodSelectedCategories)
                 .HasForeignKey(x => x.FoodCategoryId);

             // Indexes if needed
             foodSelectedCategory.HasIndex(x => x.FoodId);
             foodSelectedCategory.HasIndex(x => x.FoodCategoryId);
         });

این متد برای add کردن FoodSelectedCategory  هست . برکینگ پوینت می گدارم تا مرحلخ آخر درست پر میشه 

هم FoodId  رو میگیره و هم FoodCategoryId

منتها اخرش اد نمیشه و خطای زیر رو میده:

      public async Task AddFoodSelectedCategory(int foodId, List<int> foodCategoryId)
      {
          if (!foodCategoryId.Any())
              return;

          foreach (var foodCat in foodCategoryId)
          {
              FoodSelectedCategory foodSelectedCategory = new FoodSelectedCategory()
              {
                  FoodId = foodId,
                  FoodCategoryId = foodCat,
                  RegisterDate = DateTime.Now,
              };
              await _foodRepository.AddFoodSelectedCategory(foodSelectedCategory);
              await _foodRepository.SaveChanges();
          }
      }

خطا:

 

SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_FoodSelectedCategories_FoodCategories_FoodCategoryId". The conflict occurred in database "EvSef_db", table "dbo.FoodCategories", column 'FoodCategoryId'.

 

ولی قبلش این Fluent api  رو می داشتم حداقل خطای conflict  نمیداد و یه سطر توی FoodSelectedCategory  ایچاد میشد FoodId  ثبت میشددولی FoodCategoryId  رو 0 ثبت میکرد

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

  • 1403/02/17
  • ساعت 10:40

کاربرگرامی ! لطفا به پیام صوتی زیر گوش دهید.


  • 1403/02/17
  • ساعت 14:54

اون مورد حل شد ممنون استاد بله صفر وارد میشد و من متوجه نمی شدم

 

فقط یه سوال 

چون مدلها رو نوشتم همین جا پرسیدم

یه متدی دارم که لیستی از Food  ها رو از دیتا بیس نشون میده 

حالا می خوام جلوی هر غذا دسته بندی که برای اون غذا هم انتخاب شده نشون بده 

چون مدلها با هم رابطه دارند نیازی نیست که برای این هم متدی نوشته بشه درسته ؟

و فقط به واسطه رابطه شون میشه استخراجش کرد و توی ویوو نشون داد درسته؟

اگه بله که توی ویو من می خوام اون غذا رو که داره لیست می کنه اول برم توی FoodSelectedCategory 

FoodCategoryId  رو بدست بیارم 

بعد دوباره از توی جدول FoodCategory  عنوانش رو در بیارم و نشون بدم: FoodCategoryTitle

این کد اشتباه داره و نشون نمیده .چطور باید اینجا استخراجش کرد:

       <td>
           @if (!string.IsNullOrEmpty(food.FoodTitle))

           {
               var category = Model.FoodCategories.FirstOrDefault(c => c.FoodCategoryId == food.FoodId);
   
               if (category != null)
               {
                   <span>@category.FoodCategoryTitle</span>
               }
           }
       </td> 

  • 1403/02/20
  • ساعت 10:36

سلام وقت شما بخیر

بسیار هم عالی 

بله دقیقا میتونی از رابطش استفاده کنی و در زمان کوئری زدن چون میخوای دیتای مربوطه رو بیاری باید از include استفاده کنی


  • 1403/02/21
  • ساعت 16:25

ممنون استاد حل شد


logo-samandehi