مشکل در بخش اضافه کردن محصول

pouryamontakhabii

عضویت : 1397/08/06 پرسش ها : 18 پاسخ ها : 6

مشکل در بخش اضافه کردن محصول

ارسال شده در : ‫۱ سال و ۱ ماه قبل، یک شنبه ۳۰ دی ۱۳۹۷، ساعت ۱۳:۳۱

سلام استاد من تو بخش پنل مدیریت محصولاتم قسمت اضافه کردن محصول جدید مشکلی  که دارم اینه که محضول جدید اضافه میشه هم در جدول Products و هم در جدول ProductTags و هم در جدول Product-selected-groups  

اما ProductID محصولی که در productTags و Product-selected-groups اضافه میشن مقدار 0 رو میگیرن . اما در جدول Products درسته .

کد مربوط به کنترلرم 

       [HttpGet]
        public ActionResult Create()
        {
            ViewBag.ProductGroups = _iProductGroupsRepo.getAllProductGroups().ToList();
            return View();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(Products products, List<int> selectedGroups, HttpPostedFileBase imageProduct,string tags)
         {
            products.ImageName = "images.jpg";
            if (imageProduct != null)
            {
                if (!imageProduct.IsImage())
                {
                    
                    ViewBag.state = false;
                    TempData["message"] = "در انتخای تصویر دقت کنید . مجددا سعی کنید ";
                    ViewBag.ProductGroups = _iProductGroupsRepo.getAllProductGroups().ToList();
                    return View();

                }
                products.ImageName = Guid.NewGuid().ToString() + Path.GetExtension(imageProduct.FileName);
                imageProduct.SaveAs(Server.MapPath("/Images/ProductImage/" + imageProduct.FileName));
                ImageResizer imgResizer=new ImageResizer();
                imgResizer.Resize(Server.MapPath("/Images/ProductImage/" + imageProduct.FileName),
                    Server.MapPath("/Images/ProductThumbnails/" + imageProduct.FileName));
                products.CreateDate = DateTime.Now;
                _iProductRepo.addProducts(products);
                foreach (int groups in selectedGroups)
                {
                  _iProductGroupsRepo.addProductSelectedGroups(new Product_Selected_Groups()
                  {
                      ProductID = products.ProductID,
                      GroupID = groups
                  });
                }
                if (!string.IsNullOrEmpty(tags))
                {
                    string[] tag = tags.Split(',');
                    foreach (var t in tag)
                    {
                     _iProductRepo.addProductTags(new Product_Tags()
                     {
                         ProductID = products.ProductID,
                         Tag = t.Trim()
                     });   
                    }
                }
                _iProductRepo.save();
                _iProductGroupsRepo.save();
                return RedirectToAction("Index");

            }
            ViewBag.ProductGroups = _iProductGroupsRepo.getAllProductGroups().ToList();
            return View();
        }

 

 

این هم کد مربوط به View صفحه  Create 

 

@using System.Drawing.Imaging
@using DomainClasses.Models
@model DomainClasses.Models.Products

@{
    ViewBag.Title = "افزودن محصول جدید ";
    Layout = "~/Areas/Admin/Views/Shared/_Layout.cshtml";
}

<h2 style="padding-top: 50px;padding-bottom: 50px;">افزودن محصول جدید </h2>
<div class="row">


    @using (Html.BeginForm("Create", "ProductsPanel", FormMethod.Post, new {enctype = "multipart/form-data"}))
    {
        <div class="col-md-8">
            @Html.AntiForgeryToken()


            <div class="form-horizontal">
                @Html.ValidationSummary(true, "", new {@class = "text-danger"})
                <div class="form-group">
                    @Html.LabelFor(model => model.Title, htmlAttributes: new {@class = "control-label col-md-2"})
                    <div class="col-md-10">
                        @Html.EditorFor(model => model.Title, new {htmlAttributes = new {@class = "form-control"}})
                        @Html.ValidationMessageFor(model => model.Title, "", new {@class = "text-danger"})
                    </div>
                </div>

                <div class="form-group">
                    @Html.LabelFor(model => model.ShortDescription, htmlAttributes: new {@class = "control-label col-md-2"})
                    <div class="col-md-10">
                        @Html.EditorFor(model => model.ShortDescription, new {htmlAttributes = new {@class = "form-control"}})
                        @Html.ValidationMessageFor(model => model.ShortDescription, "", new {@class = "text-danger"})
                    </div>
                </div>

                <div class="form-group">
                    @Html.LabelFor(model => model.Text, htmlAttributes: new {@class = "control-label col-md-2"})
                    <div class="col-md-10">
                        @Html.EditorFor(model => model.Text, new {htmlAttributes = new {@class = "form-control"}})
                        @Html.ValidationMessageFor(model => model.Text, "", new {@class = "text-danger"})
                    </div>
                </div>

                <div class="form-group">
                    @Html.LabelFor(model => model.Price, htmlAttributes: new {@class = "control-label col-md-2"})
                    <div class="col-md-10">
                        @Html.EditorFor(model => model.Price, new {htmlAttributes = new {@class = "form-control"}})
                        @Html.ValidationMessageFor(model => model.Price, "", new {@class = "text-danger"})
                    </div>
                </div>

                <div class="form-group">

                    <div class="col-md-10">

                        <input style="margin-right: 129px" type="text" class="form-control" placeholder="کلمات کلیدی را با  , (کاما)  از هم جدا نمایید "
                               name="tags"/>

                    </div>
                </div>




                <div class="form-group">
                    <div class="col-md-offset-2 col-md-10">
                        <input type="submit" value="افزودن " class="btn btn-primary"/>
                    </div>
                </div>
            </div>
            

            <div>
                @Html.ActionLink("بازگشت به صفحه اصلی ", "Index")
            </div>
        </div>
        <div class="col-md-4">
            <div class="panel panel-primary">
                <div class="panel-heading">تصویر محصول</div>
                <div class="panel-body">
                    <div class="form-group" style="margin: 3px auto">
                        @Html.LabelFor(model => model.ImageName, htmlAttributes: new {@class = "control-label col-md-2"})
                        <div class="col-md-10 thumb">
                            <img src="/Images/images.jpg" class="thumbnail" id="imgPreviewProduct" style="width: 200px; height: 200px"/>
                        </div>
                        <input type="file" name="imageProduct" id="uploadFile" class="btn btn-info btn-block "/>
                        @Html.ValidationMessageFor(model => model.ImageName, "", new {@class = "text-danger"})

                    </div>
                </div>
            </div>
            <div class="panel panel-primary">
                <div class="panel-heading">گروه محصولات</div>
                <div class="panel-body">
                    @{
                        List<ProductGroups> productGroups = ViewBag.ProductGroups;
                        <ul>
                            @foreach (var groups in productGroups.Where(a => a.ParentID == null))
                            {
                                <li style="list-style-type: none">
                                    <input type="checkbox" value="@groups.GroupID" name="selectedGroups"/><span>  @groups.GroupTitle</span>
                                </li>

                            }
                        </ul>

                    }

                </div>
            </div>


        </div>

    }
    </div>




@section Scripts{
    <script>

        function readURL(input) {

            if (input.files && input.files[0]) {
                var reader = new FileReader();

                reader.onload = function (e) {
                    $('#imgPreviewProduct').attr('src', e.target.result);
                }

                reader.readAsDataURL(input.files[0]);
            }
        }
        $("#uploadFile").change(function () {
            readURL(this);
        });



        $(function () {
            $('#Text').ckeditor();
        });

    </script>







    <script src="/ckeditor/ckeditor.js"></script>
    <script src="/ckeditor/adapters/jquery.js"></script>
}


 

ایمان مدائنی

عضویت : 1396/09/10 پرسش ها : 5 پاسخ ها : 10871
ارسال شده در :‫۱ سال و ۱ ماه قبل، یک شنبه ۳۰ دی ۱۳۹۷، ساعت ۱۵:۳۶

سلام 

بررسی کنید ستون ProductID به صورت Auto Increment شده باشد 

0 تشکر

pouryamontakhabii

عضویت : 1397/08/06 پرسش ها : 18 پاسخ ها : 6
ارسال شده در :‫۱ سال و ۱ ماه قبل، یک شنبه ۳۰ دی ۱۳۹۷، ساعت ۱۶:۰۷

اون مشکلم رو باطراحی مجدد جدول product  درست کردم . اشتباه از طراحی بود .

اما الان اون مشکل رو ندارم وقتی میخوام ذخیره کنم این پیغام خطارو میده 

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.Product_Selected_Groups_dbo.Products_ProductID". The conflict occurred in database "MyEshopDatabase", table "dbo.Products", column 'ProductID'.
The statement has been terminated.

اطلاعات با موفقیت تو جدول Product , ProductTags ذخیره میشن اما تو ProductSeletctedGroups نه . 

من جداولم رو چون codefirst طراحی کردم فک میکنم ازین باشه استاد . ممنون میشم کد جداولم رو بررسی کنین . 

 

جدول Products

 public class Products
    {

        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Display(Name = "شناسه محصول")]
        public int ProductID { get; set; }

        [Display(Name = "عنوان محصول")]
        [Required(ErrorMessage = "لطفا {0} را وارد نمایید")]
        [StringLength(350), Column(TypeName = "nvarchar")]
        public string Title { get; set; }

        [Display(Name = "توضیح مختصر")]
        [Required(ErrorMessage = "لطفا {0} را وارد نمایید")]
        [StringLength(350), Column(TypeName = "nvarchar")]
        [DataType(DataType.MultilineText)]
        public string ShortDescription { get; set; }

        [Display(Name = "توضیحات")]
        [Required(ErrorMessage = "لطفا {0} را وارد نمایید")]
        [Column(TypeName = "nvarchar")]
        [DataType(DataType.MultilineText)]
        [AllowHtml]
        public string Text { get; set; }

        [Display(Name = "قیمت محصول")]
        [Required(ErrorMessage = "لطفا {0} را وارد نمایید")]
        public int Price { get; set; }

        [Display(Name = " تصویر")]
        [StringLength(50), Column(TypeName = "varchar")]
        public string ImageName { get; set; }

        [Display(Name = "تاریخ ثبت محصول")]
        [Required(ErrorMessage = "لطفا {0} را وارد نمایید")]
        public DateTime CreateDate { get; set; }


        //Navigation Property
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Product_Selected_Groups> Product_Selected_Groups { get; set; }




        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Product_Tags> Product_Tags { get; set; }



        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Product_Galleries> Product_Galleries { get; set; }

 

جدول Product_Selected_Groups

 public class Product_Selected_Groups
    {
        [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int PG_ID { get; set; }

        [Display(Name = "شناسه محصول ")]
        [Required]
        public int ProductID { get; set; }

        [Display(Name = "شناسه گروه")]
        [Required]
        public int GroupID { get; set; }


        //Navigation Property
        public virtual ProductGroups ProductGroup { get; set; }

        public virtual Products Product { get; set; }

    }

 

جدول Product_Groups

public  class ProductGroups
    {
        
        
        [Key]
        public int GroupID { get; set; }

        [Display(Name = "عنوان گروه")]
        [Required(AllowEmptyStrings = false,ErrorMessage = "لطفا {0} را وارد نمایید ")]
        [StringLength(450)]
        public string GroupTitle { get; set; }

        
        public int? ParentID { get; set; }


        //Navigation Property

        public virtual ICollection<ProductGroups> Product_Groups1 { get; set; }
        public virtual ProductGroups Product_Groups2 { get; set; }


        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Product_Selected_Groups> Product_Selected_Groups { get; set; }


    }

 

این هم فایل Context 

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<ProductGroups>()
            .HasMany(e => e.Product_Groups1)
            .WithOptional(e => e.Product_Groups2)
            .HasForeignKey(e => e.ParentID);

            modelBuilder.Entity<Product_Galleries>()
               .Property(e => e.ImageName)
               .IsUnicode(false);

            modelBuilder.Entity<ProductGroups>()
                .HasMany(e => e.Product_Selected_Groups)
                .WithRequired(e => e.ProductGroup)
                .WillCascadeOnDelete(false);

            modelBuilder.Entity<Products>()
                .Property(e => e.ImageName)
                .IsUnicode(false);

            modelBuilder.Entity<Products>()
                .HasMany(e => e.Product_Galleries)
                .WithRequired(e => e.Product)
                .WillCascadeOnDelete(false);

            modelBuilder.Entity<Products>()
                .HasMany(e => e.Product_Selected_Groups)
                .WithRequired(e => e.Product)
                .WillCascadeOnDelete(false);

            modelBuilder.Entity<Products>()
                .HasMany(e => e.Product_Tags)
                .WithRequired(e => e.Product)
                .WillCascadeOnDelete(false);
        }

 

ممنون میشم کمکم کنید  

 

0 تشکر

ایمان مدائنی

عضویت : 1396/09/10 پرسش ها : 5 پاسخ ها : 10871
ارسال شده در :‫۱ سال و ۱ ماه قبل، یک شنبه ۳۰ دی ۱۳۹۷، ساعت ۱۶:۱۶

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

بررسی کنید 

 

0 تشکر

برای ارسال پاسخ باید وارد شوید و یا در سایت عضو شوید