繁体   English   中英

为什么在Asp.net MVC中将数据添加到两个表而不是一个表中

[英]why my data is add in two tables instead of one table in Asp.net mvc

我有两个类,分别是Good和Category。但是我有一个很奇怪的问题。 实际上,当我将表单提交给控制器以添加良好的实体时。一条记录添加了好消息,一条记录添加了类别,但是我不想在类别中添加任何数据。 我的控制器得到三个参数良好的实体和HttpPostedFileBase file, IEnumerable<HttpPostedFileBase> files

  public class Good
    {
        public Good()
        {
            Images = new List<ImageList>();
            Category = new Category();
        }


        [Key]
        public int ProductId { get; set; }
        [Display(Name = "نام کالا")]
        public string Name { get; set; }
        [Display(Name = "نام تصویر")]
        public string ImageName { get; set; }
        public string LargeImageName { get; set; }
        [Display(Name = "نام لاتین")]
        public string EnglishName { get; set; }
        [Display(Name = "قیمت")]
        public string Price { get; set; }
        [AllowHtml]
        [Display(Name = "توضیح مختصر")]
        public string ShortDescription { get; set; }

        [Display(Name = "کلمات کلیدی")]
        public string Keyword { get; set; }
        [Display(Name = "تعداد بازدید")]
        public int PageVisit { get; set; }
        [Display(Name = "وضعیت")]
        public Boolean Status { get; set; }
        //Fk

        public int CategoryId { get; set; }
        [ForeignKey("CategoryId")]
        public Category Category { get; set; }

        public virtual ICollection<ImageList> Images { get; set; }

    }

===============

public class Category
    {
        [Key]
        public int Id { get; set; }
        [Display(Name = "نام مجموعه")]
        public string CategoryName { get; set; }
        [Display(Name = "نام انگلیسی مجموعه")]
        public string EnglishName { get; set; }


        //navigation
        public virtual ICollection<Good> Good { get; set; }

    }

============================

  [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "ProductId,Name,ImageName,LargeImageName,EnglishName,Price,ShortDescription,Keyword,PageVisit,Status,CategoryId")] Good good, HttpPostedFileBase file, IEnumerable<HttpPostedFileBase> files)
    {

        if (ModelState.IsValid)
        {
            if (file != null)
            {
                if (file.ContentLength > 0)
                {
                    var versions = new Dictionary<string, string>();
                    var checkSizeImage = ImageBuilder.Current.LoadImageInfo(file, null);
                    var setting = new ResizeSettings
                    {
                        MaxWidth = 600,
                        MaxHeight = 300,
                        Format = "jpg,png"
                    };


                    var path = Server.MapPath("/UploadFiles/Images/GoodGallery/");
                    versions.Add("_small", "maxwidth=270&maxheight=180&format=jpg");
                    versions.Add("_large", "maxwidth=600&maxheight=400&format=jpg");



                    foreach (var suffix in versions.Keys)
                    {
                        file.InputStream.Seek(0, System.IO.SeekOrigin.Begin);
                        ImageBuilder.Current.Build(new ImageJob(file.InputStream, path + file.FileName + suffix, new Instructions(versions[suffix]), false, true));
                    }


                    //good. = DateTime.Now.ToString();
                    var dotPosition = file.FileName.IndexOf('.');
                    var largeFileName = file.FileName.Insert(dotPosition, ".jpg_large");
                    var fileName = file.FileName.Insert(dotPosition, ".jpg_small");
                    good.LargeImageName = largeFileName;
                    good.ImageName = fileName;

                }
            }
            else
            {
                good.LargeImageName = "No_Image.png";
                good.ImageName = "No_Image.png";
            }
            if (files != null)
            {
                foreach (var file2 in files)
                {
                    if (file2 != null && file2.ContentLength > 0)
                    {
                        var versions = new Dictionary<string, string>();

                        var path = Server.MapPath("/UploadFiles/Images/GoodGallery/");
                        versions.Add("_small", "maxwidth=270&maxheight=180&format=jpg");
                        versions.Add("_large", "maxwidth=600&maxheight=400&format=jpg");
                        foreach (var suffix in versions.Keys)
                        {
                            file2.InputStream.Seek(0, System.IO.SeekOrigin.Begin);
                            ImageBuilder.Current.Build(new ImageJob(file2.InputStream, path + file2.FileName + suffix, new Instructions(versions[suffix]), false, true));
                        }

                        var dotPosition = file2.FileName.IndexOf('.');
                        var largeFileName = file2.FileName.Insert(dotPosition, ".jpg_large");
                        var smallfileName = file2.FileName.Insert(dotPosition, ".jpg_small");
                        good.Images.Add(new ImageList { LargeImageName = largeFileName, SmallImageName = smallfileName });


                    }
                }
            }
            else
            {
                good.Images.Add(new ImageList { LargeImageName = "No_Image.png", SmallImageName = "No_Image.png" });
            }
            ViewBag.Message = "فایل با موفقیت آپلود شد.";
        }

        db.Goods.Add(good);
        db.SaveChanges();

        ViewBag.CategoryId = new SelectList(db.Categories, "Id", "CategoryName", good.CategoryId);
        return View(good);

    }

这是因为您有Category = new Category(); 在您的Good类构造函数中。

由于Good拥有一个名为category的属性,并且您已经实现了这样的category类,并且制作了一个外键,这就是为什么。以不同的方式实现或在实体框架中实现外键就是这样-如果您不希望插入行,你应该停止前钥匙

请检查设计,您可以通过https://samsaffron.com/archive/2012/01/16/that-annoying-insert-problem-getting-data-into-the-db-using-dapper

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM